aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/GroupBusinessLogic.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/GroupBusinessLogic.java')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/GroupBusinessLogic.java353
1 files changed, 167 insertions, 186 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/GroupBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/GroupBusinessLogic.java
index 1f906aefac..417380b5d9 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/GroupBusinessLogic.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/GroupBusinessLogic.java
@@ -31,6 +31,7 @@ import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException;
import org.openecomp.sdc.be.components.impl.exceptions.ByResponseFormatComponentException;
+import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
import org.openecomp.sdc.be.components.impl.lock.LockingTransactional;
import org.openecomp.sdc.be.components.impl.policy.PolicyTargetsUpdateHandler;
import org.openecomp.sdc.be.components.utils.Utils;
@@ -47,12 +48,25 @@ import org.openecomp.sdc.be.datatypes.elements.PolicyTargetType;
import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
import org.openecomp.sdc.be.datatypes.enums.CreatedFrom;
+import org.openecomp.sdc.be.datatypes.enums.PromoteVersionEnum;
import org.openecomp.sdc.be.info.ArtifactDefinitionInfo;
import org.openecomp.sdc.be.info.ArtifactTemplateInfo;
import org.openecomp.sdc.be.info.GroupDefinitionInfo;
-import org.openecomp.sdc.be.model.*;
+import org.openecomp.sdc.be.model.ArtifactDefinition;
+import org.openecomp.sdc.be.model.Component;
+import org.openecomp.sdc.be.model.ComponentInstance;
+import org.openecomp.sdc.be.model.ComponentParametersView;
+import org.openecomp.sdc.be.model.DataTypeDefinition;
+import org.openecomp.sdc.be.model.GroupDefinition;
+import org.openecomp.sdc.be.model.GroupInstance;
+import org.openecomp.sdc.be.model.GroupInstanceProperty;
+import org.openecomp.sdc.be.model.GroupProperty;
+import org.openecomp.sdc.be.model.GroupTypeDefinition;
+import org.openecomp.sdc.be.model.PropertyDefinition;
import org.openecomp.sdc.be.model.PropertyDefinition.GroupInstancePropertyValueUpdateBehavior;
import org.openecomp.sdc.be.model.PropertyDefinition.PropertyNames;
+import org.openecomp.sdc.be.model.Resource;
+import org.openecomp.sdc.be.model.User;
import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ArtifactsOperations;
import org.openecomp.sdc.be.model.jsonjanusgraph.operations.GroupsOperation;
import org.openecomp.sdc.be.model.jsonjanusgraph.operations.InterfaceOperation;
@@ -66,13 +80,26 @@ import org.openecomp.sdc.be.model.operations.impl.DaoStatusConverter;
import org.openecomp.sdc.be.model.operations.impl.InterfaceLifecycleOperation;
import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
import org.openecomp.sdc.common.api.Constants;
+import org.openecomp.sdc.common.log.elements.LoggerSupportability;
+import org.openecomp.sdc.common.log.enums.LogLevel;
+import org.openecomp.sdc.common.log.enums.LoggerSupportabilityActions;
+import org.openecomp.sdc.common.log.enums.StatusCode;
import org.openecomp.sdc.common.log.wrappers.Logger;
import org.openecomp.sdc.common.util.ValidationUtils;
import org.openecomp.sdc.exception.ResponseFormat;
import org.springframework.beans.factory.annotation.Autowired;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.Map.Entry;
+import java.util.Optional;
+import java.util.Set;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@@ -85,7 +112,7 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
public static final String GROUP_DELIMITER_REGEX = "\\.\\.";
- public static final String INITIAL_VERSION = "1";
+ public static final String INITIAL_VERSION = "0.0";
private static final String ADDING_GROUP = "AddingGroup";
@@ -99,6 +126,8 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
private static final Logger log = Logger.getLogger(GroupBusinessLogic.class);
+ public LoggerSupportability loggerSupportability= LoggerSupportability.getLogger(GroupBusinessLogic.class.getName());
+
private final AccessValidations accessValidations;
private final PolicyTargetsUpdateHandler policyTargetsUpdateHandler;
@@ -218,22 +247,14 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
public Either<GroupDefinition, ResponseFormat> validateAndUpdateGroupMetadata(String componentId, User user, ComponentTypeEnum componentType, GroupDefinition updatedGroup, boolean inTransaction , boolean shouldLock) {
Either<GroupDefinition, ResponseFormat> result = null;
+ boolean failed = false;
try {
// Validate user exist
- validateUserExists(user.getUserId(), UPDATE_GROUP, inTransaction);
+ validateUserExists(user.getUserId());
// Validate component exist
- Either<? extends org.openecomp.sdc.be.model.Component, ResponseFormat> validateComponent = validateComponentExists(componentId, componentType, null);
- if (validateComponent.isRight()) {
- result = Either.right(validateComponent.right().value());
- return result;
- }
- org.openecomp.sdc.be.model.Component component = validateComponent.left().value();
+ org.openecomp.sdc.be.model.Component component = validateComponentExists(componentId, componentType, null);
// validate we can work on component
- Either<Boolean, ResponseFormat> canWork = validateCanWorkOnComponent(component, user.getUserId());
- if (canWork.isRight()) {
- result = Either.right(canWork.right().value());
- return result;
- }
+ validateCanWorkOnComponent(component, user.getUserId());
List<GroupDefinition> currentGroups = component.getGroups();
if (CollectionUtils.isEmpty(currentGroups)) {
log.error("Failed to update the metadata of group {} on component {}. The status is {}. ", updatedGroup.getName(), component.getName(), ActionStatus.GROUP_IS_MISSING);
@@ -249,11 +270,7 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
}
GroupDefinition currentGroup = currentGroupOpt.get();
if ( shouldLock ){
- Either<Boolean, ResponseFormat> lockResult = lockComponent(componentId, component, "Update GroupDefinition Metadata");
- if (lockResult.isRight()) {
- result = Either.right(lockResult.right().value());
- return result;
- }
+ lockComponent(componentId, component, "Update GroupDefinition Metadata");
}
// Validate group type is vfModule
if (currentGroup.getType().equals(Constants.GROUP_TOSCA_HEAT)) {
@@ -265,8 +282,11 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
result = updateGroupMetadata(component, currentGroup, updatedGroup);
return result;
- } finally {
- if (result != null && result.isLeft()) {
+ }catch (ComponentException e){
+ failed = true;
+ throw e;
+ }finally {
+ if (!failed) {
janusGraphDao.commit();
} else {
janusGraphDao.rollback();
@@ -293,23 +313,10 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
private Either<GroupDefinition, ResponseFormat> updateGroup(Component component, GroupDefinition updatedGroup, String currentGroupName) {
Either<GroupDefinition, StorageOperationStatus> handleGroupRes;
Either<GroupDefinition, ResponseFormat> result = null;
- if (updatedGroup.getName().equals(currentGroupName)) {
- handleGroupRes = groupsOperation.updateGroup(component, updatedGroup);
- if (handleGroupRes.isRight()) {
- log.debug("Failed to update a metadata of the group {} on component {}. ", updatedGroup.getName(), component.getName());
- result = Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(handleGroupRes.right().value())));
- }
- } else {
- StorageOperationStatus deleteStatus = groupsOperation.deleteGroup(component, currentGroupName);
- if (deleteStatus != StorageOperationStatus.OK) {
- log.debug("Failed to delete the group {} from component {}. ", updatedGroup.getName(), component.getName());
- result = Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(deleteStatus)));
- }
- handleGroupRes = groupsOperation.addGroup(component, updatedGroup);
- if (handleGroupRes.isRight()) {
- log.debug("Failed to add the group {} to component {}. ", updatedGroup.getName(), component.getName());
- result = Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(handleGroupRes.right().value())));
- }
+ handleGroupRes = groupsOperation.updateGroup(component, updatedGroup);
+ if (handleGroupRes.isRight()) {
+ log.debug("Failed to update a metadata of the group {} on component {}. ", updatedGroup.getName(), component.getName());
+ result = Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(handleGroupRes.right().value())));
}
if (result == null) {
result = Either.left(updatedGroup);
@@ -424,7 +431,7 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
Either<GroupDefinitionInfo, ResponseFormat> result = null;
// Validate user exist
- validateUserExists(userId, GET_GROUP, true);
+ validateUserExists(userId);
// Validate component exist
org.openecomp.sdc.be.model.Component component = null;
@@ -435,17 +442,12 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
componentParametersView.setIgnoreArtifacts(false);
componentParametersView.setIgnoreUsers(false);
- Either<? extends org.openecomp.sdc.be.model.Component, ResponseFormat> validateComponent = validateComponentExists(componentId, componentType, componentParametersView);
- if (validateComponent.isRight()) {
- result = Either.right(validateComponent.right().value());
- return result;
- }
- component = validateComponent.left().value();
+ component = validateComponentExists(componentId, componentType, componentParametersView);
Either<GroupDefinition, StorageOperationStatus> groupEither = findGroupOnComponent(component, groupId);
if (groupEither.isRight()) {
- log.debug("Faild to find group {} under component {}", groupId, component.getUniqueId());
+ log.debug("Failed to find group {} under component {}", groupId, component.getUniqueId());
BeEcompErrorManager.getInstance().logInvalidInputError(GET_GROUP, "group " + groupId + " not found under component " + component.getUniqueId(), ErrorSeverity.INFO);
String componentTypeForResponse = getComponentTypeForResponse(component);
result = Either.right(componentsUtils.getResponseFormat(ActionStatus.GROUP_IS_MISSING, groupId, component.getSystemName(), componentTypeForResponse));
@@ -453,18 +455,8 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
}
GroupDefinition group = groupEither.left().value();
- Boolean isBase = null;
List<GroupProperty> props = group.convertToGroupProperties();
- if (props != null && !props.isEmpty()) {
- Optional<GroupProperty> isBasePropOp = props.stream().filter(p -> p.getName().equals(Constants.IS_BASE)).findAny();
- if (isBasePropOp.isPresent()) {
- GroupProperty propIsBase = isBasePropOp.get();
- isBase = Boolean.parseBoolean(propIsBase.getValue());
-
- } else {
- BeEcompErrorManager.getInstance().logInvalidInputError(GET_GROUP, "failed to find prop isBase " + component.getNormalizedName(), ErrorSeverity.INFO);
- }
- }
+ Boolean isBase = isBaseProp(component, props);
List<ArtifactDefinitionInfo> artifacts = new ArrayList<>();
List<ArtifactDefinition> artifactsFromComponent = new ArrayList<>();
@@ -485,12 +477,7 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
}
artifactsFromComponent.add(deploymentArtifacts.get(id));
}
- if (!artifactsFromComponent.isEmpty()) {
- for (ArtifactDefinition artifactDefinition : artifactsFromComponent) {
- ArtifactDefinitionInfo artifactDefinitionInfo = new ArtifactDefinitionInfo(artifactDefinition);
- artifacts.add(artifactDefinitionInfo);
- }
- }
+ addArtifactsToList(artifacts, artifactsFromComponent);
}
GroupDefinitionInfo resultInfo = new GroupDefinitionInfo(group);
@@ -503,21 +490,28 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
return result;
} finally {
+ closeTransaction(inTransaction, result);
+ }
- if (!inTransaction) {
+ }
- if (result == null || result.isRight()) {
- log.debug("Going to execute rollback on create group.");
- janusGraphDao.rollback();
- } else {
- log.debug("Going to execute commit on create group.");
- janusGraphDao.commit();
- }
+ private void addArtifactsToList(List<ArtifactDefinitionInfo> artifacts, List<ArtifactDefinition> artifactsFromComponent) {
+ artifactsFromComponent.forEach(a-> artifacts.add(new ArtifactDefinitionInfo(a)));
+ }
- }
+ private Boolean isBaseProp(Component component, List<GroupProperty> props) {
+ Boolean isBase = null;
+ if (CollectionUtils.isNotEmpty(props)) {
+ Optional<GroupProperty> isBasePropOp = props.stream().filter(p -> p.getName().equals(Constants.IS_BASE)).findAny();
+ if (isBasePropOp.isPresent()) {
+ GroupProperty propIsBase = isBasePropOp.get();
+ isBase = Boolean.parseBoolean(propIsBase.getValue());
+ } else {
+ BeEcompErrorManager.getInstance().logInvalidInputError(GET_GROUP, "failed to find prop isBase " + component.getNormalizedName(), ErrorSeverity.INFO);
+ }
}
-
+ return isBase;
}
private Either<GroupDefinition, StorageOperationStatus> findGroupOnComponent(Component component, String groupId) {
@@ -591,6 +585,7 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
newGroupNameRes = validateGenerateVfModuleGroupName(resourceSystemName, description, counter);
if (newGroupNameRes.isRight()) {
log.debug("Failed to generate new vf module group name. Status is {} ", newGroupNameRes.right().value());
+ loggerSupportability.log(LogLevel.INFO,LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML.getName(),StatusCode.ERROR.name(),"Failed to generate new vf module group name. Status is: "+newGroupNameRes.right().value());
result = Either.right(newGroupNameRes.right().value());
break;
}
@@ -655,9 +650,9 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
Either<GroupDefinitionInfo, ResponseFormat> result = null;
// Validate user exist
- validateUserExists(userId, UPDATE_GROUP, true);
+ validateUserExists(userId);
// Validate component exist
- org.openecomp.sdc.be.model.Component component = null;
+ org.openecomp.sdc.be.model.Component component;
try {
ComponentParametersView componentParametersView = new ComponentParametersView();
@@ -666,12 +661,7 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
componentParametersView.setIgnoreComponentInstances(false);
componentParametersView.setIgnoreArtifacts(false);
- Either<? extends org.openecomp.sdc.be.model.Component, ResponseFormat> validateComponent = validateComponentExists(componentId, componentType, componentParametersView);
- if (validateComponent.isRight()) {
- result = Either.right(validateComponent.right().value());
- return result;
- }
- component = validateComponent.left().value();
+ component = validateComponentExists(componentId, componentType, componentParametersView);
Either<ImmutablePair<ComponentInstance, GroupInstance>, StorageOperationStatus> findComponentInstanceAndGroupInstanceRes = findComponentInstanceAndGroupInstanceOnComponent(component, componentInstanceId, groupInstId);
if (findComponentInstanceAndGroupInstanceRes.isRight()) {
@@ -683,18 +673,7 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
GroupInstance group = findComponentInstanceAndGroupInstanceRes.left().value().getRight();
- Boolean isBase = null;
- List<? extends GroupProperty> props = group.convertToGroupInstancesProperties();
- if (props != null && !props.isEmpty()) {
- Optional<? extends GroupProperty> isBasePropOp = props.stream().filter(p -> p.getName().equals(Constants.IS_BASE)).findAny();
- if (isBasePropOp.isPresent()) {
- GroupProperty propIsBase = isBasePropOp.get();
- isBase = Boolean.parseBoolean(propIsBase.getValue());
-
- } else {
- BeEcompErrorManager.getInstance().logInvalidInputError(GET_GROUP, "failed to find prop isBase " + component.getNormalizedName(), ErrorSeverity.INFO);
- }
- }
+ Boolean isBase = isBaseProperty(component, group);
List<ArtifactDefinitionInfo> artifacts = new ArrayList<>();
List<String> artifactsIds = group.getArtifacts();
@@ -702,25 +681,9 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
List<ComponentInstance> instances = component.getComponentInstances();
if (instances != null) {
- Optional<ComponentInstance> findFirst = instances.stream().filter(i -> i.getUniqueId().equals(componentInstanceId)).findFirst();
- if (findFirst.isPresent()) {
- ComponentInstance ci = findFirst.get();
- Map<String, ArtifactDefinition> deploymentArtifacts = ci.getDeploymentArtifacts();
- for (String id : artifactsIds) {
- Optional<ArtifactDefinition> artOp = deploymentArtifacts.values().stream().filter(a -> a.getUniqueId().equals(id)).findFirst();
- if (artOp.isPresent()) {
- artifacts.add(new ArtifactDefinitionInfo(artOp.get()));
- }
- }
- List<String> instArtifactsIds = group.getGroupInstanceArtifacts();
- for (String id : instArtifactsIds) {
- Optional<ArtifactDefinition> artOp = deploymentArtifacts.values().stream().filter(a -> a.getUniqueId().equals(id)).findFirst();
- if (artOp.isPresent()) {
- artifacts.add(new ArtifactDefinitionInfo(artOp.get()));
- }
- }
- }
-
+ instances.stream().filter(i -> i.getUniqueId().equals(componentInstanceId))
+ .findFirst()
+ .ifPresent(f->getFirstComponentInstance(group, artifacts, artifactsIds, f));
}
}
GroupDefinitionInfo resultInfo = new GroupDefinitionInfo(group);
@@ -733,19 +696,51 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
return result;
} finally {
+ closeTransaction(inTransaction, result);
+ }
+ }
- if (!inTransaction) {
+ private void getFirstComponentInstance(GroupInstance group, List<ArtifactDefinitionInfo> artifacts, List<String> artifactsIds, ComponentInstance ci) {
+ Map<String, ArtifactDefinition> deploymentArtifacts = ci.getDeploymentArtifacts();
+ artifactsIds.forEach(id -> deploymentArtifacts.values().stream()
+ .filter(a -> a.getUniqueId().equals(id))
+ .findFirst()
+ .ifPresent(g -> artifacts.add(new ArtifactDefinitionInfo(g))));
- if (result == null || result.isRight()) {
- log.debug("Going to execute rollback on create group.");
- janusGraphDao.rollback();
- } else {
- log.debug("Going to execute commit on create group.");
- janusGraphDao.commit();
- }
+ List<String> instArtifactsIds = group.getGroupInstanceArtifacts();
+ instArtifactsIds.forEach(id -> deploymentArtifacts.values()
+ .stream()
+ .filter(a -> a.getUniqueId().equals(id))
+ .findFirst()
+ .ifPresent(g -> artifacts.add(new ArtifactDefinitionInfo(g))));
+ }
+
+ private Boolean isBaseProperty(Component component, GroupInstance group) {
+
+ Boolean isBase = null;
+ List<? extends GroupProperty> props = group.convertToGroupInstancesProperties();
+ if (props != null && !props.isEmpty()) {
+ Optional<? extends GroupProperty> isBasePropOp = props.stream().filter(p -> p.getName().equals(Constants.IS_BASE)).findAny();
+ if (isBasePropOp.isPresent()) {
+ GroupProperty propIsBase = isBasePropOp.get();
+ isBase = Boolean.parseBoolean(propIsBase.getValue());
+ } else {
+ BeEcompErrorManager.getInstance().logInvalidInputError(GET_GROUP, "failed to find prop isBase " + component.getNormalizedName(), ErrorSeverity.INFO);
}
+ }
+ return isBase;
+ }
+ private void closeTransaction(boolean inTransaction, Either<GroupDefinitionInfo, ResponseFormat> result) {
+ if (!inTransaction) {
+ if (result == null || result.isRight()) {
+ log.debug("Going to execute rollback on create group.");
+ janusGraphDao.rollback();
+ } else {
+ log.debug("Going to execute commit on create group.");
+ janusGraphDao.commit();
+ }
}
}
@@ -768,56 +763,51 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
return result;
}
- private Either<Boolean, ResponseFormat> validateMinMaxAndInitialCountPropertyLogic(Map<PropertyNames, String> newValues, Map<PropertyNames, String> currValues, Map<PropertyNames, String> parentValues) {
+ private Boolean validateMinMaxAndInitialCountPropertyLogic(Map<PropertyNames, String> newValues, Map<PropertyNames, String> currValues, Map<PropertyNames, String> parentValues) {
- Either<Boolean, ResponseFormat> result;
for (Entry<PropertyNames, String> entry : newValues.entrySet()) {
PropertyNames currPropertyName = entry.getKey();
if (currPropertyName == PropertyNames.MIN_INSTANCES) {
String minValue = parentValues.get(PropertyNames.MIN_INSTANCES);
- String maxValue = newValues.containsKey(PropertyNames.INITIAL_COUNT) ? newValues.get(PropertyNames.MAX_INSTANCES) : currValues.get(PropertyNames.INITIAL_COUNT);
- result = validateValueInRange(new ImmutablePair<>(currPropertyName, entry.getValue()), new ImmutablePair<>(PropertyNames.MIN_INSTANCES, minValue),
+ String maxValue = getMaxValue(newValues, currValues);
+ validateValueInRange(new ImmutablePair<>(currPropertyName, entry.getValue()), new ImmutablePair<>(PropertyNames.MIN_INSTANCES, minValue),
new ImmutablePair<>(PropertyNames.MAX_INSTANCES, maxValue));
- if (result.isRight()) {
- return result;
- }
} else if (currPropertyName == PropertyNames.INITIAL_COUNT) {
String minValue = newValues.containsKey(PropertyNames.MIN_INSTANCES) ? newValues.get(PropertyNames.MIN_INSTANCES) : currValues.get(PropertyNames.MIN_INSTANCES);
String maxValue = newValues.containsKey(PropertyNames.MAX_INSTANCES) ? newValues.get(PropertyNames.MAX_INSTANCES) : currValues.get(PropertyNames.MAX_INSTANCES);
- result = validateValueInRange(new ImmutablePair<>(currPropertyName, entry.getValue()), new ImmutablePair<>(PropertyNames.MIN_INSTANCES, minValue),
+ validateValueInRange(new ImmutablePair<>(currPropertyName, entry.getValue()), new ImmutablePair<>(PropertyNames.MIN_INSTANCES, minValue),
new ImmutablePair<>(PropertyNames.MAX_INSTANCES, maxValue));
- if (result.isRight()) {
- return result;
- }
} else if (currPropertyName == PropertyNames.MAX_INSTANCES) {
- String minValue = newValues.containsKey(PropertyNames.INITIAL_COUNT) ? newValues.get(PropertyNames.MIN_INSTANCES) : currValues.get(PropertyNames.INITIAL_COUNT);
+ String minValue = getMinValue(newValues, currValues);
String maxValue = parentValues.get(PropertyNames.MAX_INSTANCES);
- result = validateValueInRange(new ImmutablePair<>(currPropertyName, entry.getValue()), new ImmutablePair<>(PropertyNames.MIN_INSTANCES, minValue),
+ validateValueInRange(new ImmutablePair<>(currPropertyName, entry.getValue()), new ImmutablePair<>(PropertyNames.MIN_INSTANCES, minValue),
new ImmutablePair<>(PropertyNames.MAX_INSTANCES, maxValue));
- if (result.isRight()) {
- return result;
- }
}
}
- return Either.left(true);
+ return true;
}
- private Either<Boolean, ResponseFormat> validateValueInRange(ImmutablePair<PropertyNames, String> newValue, ImmutablePair<PropertyNames, String> min, ImmutablePair<PropertyNames, String> max) {
- Either<Boolean, ResponseFormat> result;
+ private String getMaxValue(Map<PropertyNames, String> newValues, Map<PropertyNames, String> currValues) {
+ return newValues.containsKey(PropertyNames.INITIAL_COUNT) ? newValues.get(PropertyNames.MAX_INSTANCES) : currValues.get(PropertyNames.INITIAL_COUNT);
+ }
+
+ private String getMinValue(Map<PropertyNames, String> newValues, Map<PropertyNames, String> currValues) {
+ return newValues.containsKey(PropertyNames.INITIAL_COUNT) ? newValues.get(PropertyNames.MIN_INSTANCES) : currValues.get(PropertyNames.INITIAL_COUNT);
+ }
+
+ private Boolean validateValueInRange(ImmutablePair<PropertyNames, String> newValue, ImmutablePair<PropertyNames, String> min, ImmutablePair<PropertyNames, String> max) {
final String warnMessage = "Failed to validate {} as property value of {}. It must be not higher than {}, and not lower than {}.";
int newValueInt = parseIntValue(newValue.getValue(), newValue.getKey());
int minInt = parseIntValue(min.getValue(), min.getKey());
int maxInt = parseIntValue(max.getValue(), max.getKey());
if (newValueInt < 0 || minInt < 0 || maxInt < 0) {
- result = Either.right(componentsUtils.getResponseFormat(ActionStatus.INVALID_PROPERTY));
+ throw new ByActionStatusComponentException(ActionStatus.INVALID_PROPERTY);
} else if (newValueInt < minInt || newValueInt > maxInt) {
log.debug(warnMessage, newValue.getValue(), newValue.getKey().getPropertyName(), min.getValue(), max.getValue());
- result = Either
- .right(componentsUtils.getResponseFormat(ActionStatus.INVALID_GROUP_MIN_MAX_INSTANCES_PROPERTY_VALUE, newValue.getKey().getPropertyName(), maxInt == Integer.MAX_VALUE ? Constants.UNBOUNDED : max.getValue(), min.getValue()));
- } else {
- result = Either.left(true);
+ throw new ByActionStatusComponentException(ActionStatus.INVALID_GROUP_MIN_MAX_INSTANCES_PROPERTY_VALUE, newValue.getKey().getPropertyName(),
+ maxInt == Integer.MAX_VALUE ? Constants.UNBOUNDED : max.getValue(), min.getValue());
}
- return result;
+ return true;
}
private int parseIntValue(String value, PropertyNames propertyName) {
@@ -843,13 +833,9 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
Either<GroupInstance, ResponseFormat> actionResult = null;
Either<GroupInstance, StorageOperationStatus> updateGroupInstanceResult = null;
- Either<List<GroupInstanceProperty>, ResponseFormat> validateRes = validateReduceGroupInstancePropertiesBeforeUpdate(oldGroupInstance, newProperties);
- if (validateRes.isRight()) {
- log.debug("Failed to validate group instance {} properties before update. ", oldGroupInstance.getName());
- actionResult = Either.right(validateRes.right().value());
- }
+ List<GroupInstanceProperty> validateRes = validateReduceGroupInstancePropertiesBeforeUpdate(oldGroupInstance, newProperties);
if (actionResult == null) {
- List<GroupInstanceProperty> validatedReducedNewProperties = validateRes.left().value();
+ List<GroupInstanceProperty> validatedReducedNewProperties = validateRes;
updateGroupInstanceResult = groupsOperation.updateGroupInstancePropertyValuesOnGraph(componentId, instanceId, oldGroupInstance, validatedReducedNewProperties);
if (updateGroupInstanceResult.isRight()) {
log.debug("Failed to update group instance {} property values. ", oldGroupInstance.getName());
@@ -862,10 +848,10 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
return actionResult;
}
- private Either<List<GroupInstanceProperty>, ResponseFormat> validateReduceGroupInstancePropertiesBeforeUpdate(GroupInstance oldGroupInstance, List<GroupInstanceProperty> newProperties) {
+ private List<GroupInstanceProperty> validateReduceGroupInstancePropertiesBeforeUpdate(GroupInstance oldGroupInstance, List<GroupInstanceProperty> newProperties) {
- Either<Boolean, ResponseFormat> validationRes = null;
- Either<List<GroupInstanceProperty>, ResponseFormat> actionResult;
+ Boolean validationRes = null;
+ List<GroupInstanceProperty> actionResult = null;
Map<String, GroupInstanceProperty> existingProperties = oldGroupInstance.convertToGroupInstancesProperties().stream().collect(Collectors.toMap(PropertyDataDefinition::getName, p -> p));
Map<PropertyNames, String> newPropertyValues = new EnumMap<>(PropertyNames.class);
List<GroupInstanceProperty> reducedProperties = new ArrayList<>();
@@ -874,25 +860,19 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
for (GroupInstanceProperty currNewProperty : newProperties) {
currPropertyName = currNewProperty.getName();
validationRes = handleAndAddProperty(reducedProperties, newPropertyValues, currNewProperty, existingProperties.get(currPropertyName));
- if (validationRes.isRight()) {
- log.debug("Failed to handle property {} of group instance {}. ", currPropertyName, oldGroupInstance.getName());
- break;
- }
}
- if (validationRes == null || validationRes.isLeft()) {
+ if (validationRes == null || validationRes) {
Map<PropertyNames, String> existingPropertyValues = new EnumMap<>(PropertyNames.class);
Map<PropertyNames, String> parentPropertyValues = new EnumMap<>(PropertyNames.class);
fillValuesAndParentValuesFromExistingProperties(existingProperties, existingPropertyValues, parentPropertyValues);
validationRes = validateMinMaxAndInitialCountPropertyLogic(newPropertyValues, existingPropertyValues, parentPropertyValues);
}
- if (validationRes.isLeft()) {
- actionResult = Either.left(reducedProperties);
- } else {
- actionResult = Either.right(validationRes.right().value());
+ if (validationRes) {
+ actionResult = reducedProperties;
}
} catch (Exception e) {
log.error("Exception occured during validation and reducing group instance properties. The message is {}", e.getMessage(), e);
- actionResult = Either.right(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR));
+ throw new ByActionStatusComponentException(ActionStatus.GENERAL_ERROR);
}
return actionResult;
}
@@ -907,9 +887,9 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
}
}
- private Either<Boolean, ResponseFormat> handleAndAddProperty(List<GroupInstanceProperty> reducedProperties, Map<PropertyNames, String> newPropertyValues, GroupInstanceProperty currNewProperty, GroupInstanceProperty currExistingProperty) {
+ private Boolean handleAndAddProperty(List<GroupInstanceProperty> reducedProperties, Map<PropertyNames, String> newPropertyValues, GroupInstanceProperty currNewProperty, GroupInstanceProperty currExistingProperty) {
- Either<Boolean, ResponseFormat> validationRes = null;
+ Boolean validationRes = null;
String currPropertyName = currNewProperty.getName();
PropertyNames propertyName = PropertyNames.findName(currPropertyName);
try {
@@ -917,20 +897,15 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
log.warn("The value of property with the name {} cannot be updated. The property not found on group instance. ", currPropertyName);
} else if (isUpdatable(propertyName)) {
validationRes = validateAndUpdatePropertyValue(currNewProperty, currExistingProperty);
- if (validationRes.isRight()) {
- log.debug("Failed to validate property value {} of property {}. ", currNewProperty.getValue(), currPropertyName);
- } else {
- addPropertyUpdatedValues(reducedProperties, propertyName, newPropertyValues, currNewProperty, currExistingProperty);
- }
+ addPropertyUpdatedValues(reducedProperties, propertyName, newPropertyValues, currNewProperty, currExistingProperty);
} else {
validateImmutableProperty(currExistingProperty, currNewProperty);
}
if (validationRes == null) {
- validationRes = Either.left(true);
+ validationRes = true;
}
} catch (Exception e) {
log.error("Exception occured during handle and adding property. The message is {}", e.getMessage(), e);
- validationRes = Either.right(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR));
}
return validationRes;
}
@@ -970,9 +945,8 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
return result;
}
- private Either<Boolean, ResponseFormat> validateAndUpdatePropertyValue(GroupInstanceProperty newProperty, GroupInstanceProperty existingProperty) {
+ private Boolean validateAndUpdatePropertyValue(GroupInstanceProperty newProperty, GroupInstanceProperty existingProperty) {
- Either<Boolean, ResponseFormat> validationRes = null;
String parentValue = existingProperty.getParentValue();
newProperty.setParentValue(parentValue);
@@ -985,12 +959,9 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
StorageOperationStatus status = groupOperation.validateAndUpdatePropertyValue(newProperty);
if (status != StorageOperationStatus.OK) {
log.debug("Failed to validate property value {} of property with name {}. Status is {}. ", newProperty.getValue(), newProperty.getName(), status);
- validationRes = Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(status)));
+ throw new ByActionStatusComponentException(componentsUtils.convertFromStorageResponse(status));
}
- if (validationRes == null) {
- validationRes = Either.left(true);
- }
- return validationRes;
+ return true;
}
private void validateImmutableProperty(GroupProperty oldProperty, GroupProperty newProperty) {
@@ -1069,7 +1040,7 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
private int getNewGroupCounter(Component component) {
List<String> existingNames = component.getGroups()
.stream()
- .map(GroupDataDefinition::getName)
+ .map(GroupDataDefinition::getInvariantName)
.collect(toList());
List<String> existingIds = component.getGroups()
.stream()
@@ -1180,7 +1151,7 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
break;
}
GroupDefinition handledGroup = handleGroupRes.left().value();
- groups.put(handledGroup.getName(), new GroupDataDefinition(handledGroup));
+ groups.put(handledGroup.getInvariantName(), new GroupDataDefinition(handledGroup));
}
}
@@ -1196,6 +1167,7 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
if (result == null) {
result = Either.left(groupDefinitions);
}
+ component.setGroups(groupDefinitions);
return result;
}
@@ -1258,6 +1230,7 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
if (createGroupsResult.isRight()) {
result = Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(createGroupsResult.right().value())));
}
+ component.addGroups(createGroupsResult.left().value());
}
if (result == null) {
addCalculatedCapabilitiesWithPropertiesToComponent(component, groupDefinitions, fromCsar);
@@ -1278,6 +1251,9 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
} else {
deleteCalculatedCapabilitiesWithPropertiesFromComponent(component, groupDefinitions);
}
+ if (component.getGroups()!=null) {
+ component.getGroups().removeAll(deleteGroupsResult.left().value());
+ }
return Either.left(deleteGroupsResult.left().value());
}
@@ -1291,7 +1267,7 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
Either<List<GroupDefinition>, ResponseFormat> result = null;
Either<List<GroupDefinition>, StorageOperationStatus> createGroupsResult;
- createGroupsResult = groupsOperation.updateGroups(component, groupDefinitions.stream().map(GroupDataDefinition::new).collect(toList()), true);
+ createGroupsResult = groupsOperation.updateGroups(component, groupDefinitions.stream().map(GroupDataDefinition::new).collect(toList()), PromoteVersionEnum.MINOR);
if (createGroupsResult.isRight()) {
result = Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(createGroupsResult.right().value())));
}
@@ -1307,6 +1283,7 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
private Either<GroupDefinition, ResponseFormat> handleGroup(Component component, GroupDefinition groupDefinition, Map<String, DataTypeDefinition> allDAtaTypes) {
log.trace("Going to create group {}", groupDefinition);
+ loggerSupportability.log(LoggerSupportabilityActions.CREATE_GROUP_POLICY,component.getComponentMetadataForSupportLog(),StatusCode.STARTED,"Start to create group: {}",groupDefinition.getName()+ " for component " + component.getName());
// 3. verify group not already exist
String groupDefinitionName = groupDefinition.getName();
if (groupExistsInComponent(groupDefinitionName, component)) {
@@ -1322,6 +1299,7 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
if (getGroupType.isRight()) {
StorageOperationStatus status = getGroupType.right().value();
if (status == StorageOperationStatus.NOT_FOUND) {
+ loggerSupportability.log(LoggerSupportabilityActions.CREATE_GROUP_POLICY,component.getComponentMetadataForSupportLog(), StatusCode.ERROR,"group {} cannot be found",groupDefinition.getName());
BeEcompErrorManager.getInstance().logInvalidInputError(CREATE_GROUP, "group type " + groupType + " cannot be found", ErrorSeverity.INFO);
return Either.right(componentsUtils.getResponseFormat(ActionStatus.GROUP_TYPE_IS_INVALID, groupType));
} else {
@@ -1351,6 +1329,7 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
if (CollectionUtils.isNotEmpty(properties)) {
if (CollectionUtils.isEmpty(groupTypeProperties)) {
BeEcompErrorManager.getInstance().logInvalidInputError(ADDING_GROUP, "group type does not have properties", ErrorSeverity.INFO);
+ loggerSupportability.log(LoggerSupportabilityActions.CREATE_GROUP_POLICY,component.getComponentMetadataForSupportLog(), StatusCode.ERROR,"group {} does not have properties ",groupDefinition.getName());
return Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(JanusGraphOperationStatus.MATCH_NOT_FOUND))));
}
@@ -1379,7 +1358,7 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
groupDefinition.setGroupUUID(UniqueIdBuilder.generateUUID());
groupDefinition.setVersion(INITIAL_VERSION);
groupDefinition.setTypeUid(groupTypeDefinition.getUniqueId());
-
+ loggerSupportability.log(LoggerSupportabilityActions.CREATE_GROUP_POLICY,component.getComponentMetadataForSupportLog(), StatusCode.COMPLETE,"group {} has been created ",groupDefinition.getName());
return Either.left(groupDefinition);
}
@@ -1387,7 +1366,9 @@ public class GroupBusinessLogic extends BaseBusinessLogic {
boolean found = false;
List<GroupDefinition> groups = component.getGroups();
if (CollectionUtils.isNotEmpty(groups)) {
- found = groups.stream().filter(p -> p.getName().equalsIgnoreCase(groupDefinitionName)).findFirst().orElse(null) != null;
+ found = groups.stream().filter(p -> (p.getName().equalsIgnoreCase(groupDefinitionName))
+ || p.getInvariantName().equalsIgnoreCase(groupDefinitionName))
+ .findFirst().orElse(null) != null;
}
return found;
}