diff options
Diffstat (limited to 'dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/RuleEditorController.java')
-rw-r--r-- | dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/RuleEditorController.java | 392 |
1 files changed, 42 insertions, 350 deletions
diff --git a/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/RuleEditorController.java b/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/RuleEditorController.java index 3f5ff1a..8de8520 100644 --- a/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/RuleEditorController.java +++ b/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/RuleEditorController.java @@ -1,89 +1,37 @@ package org.onap.sdc.dcae.composition.controller; -import com.google.gson.JsonParseException; -import org.apache.commons.collections.ListUtils; -import org.apache.commons.collections.MapUtils; -import org.apache.commons.lang3.StringUtils; import org.onap.sdc.common.onaplog.Enums.LogLevel; -import org.onap.sdc.dcae.composition.restmodels.sdc.Artifact; -import org.onap.sdc.dcae.composition.restmodels.sdc.Asset; -import org.onap.sdc.dcae.composition.restmodels.sdc.ResourceDetailed; -import org.onap.sdc.dcae.composition.CompositionConfig; -import org.onap.sdc.dcae.utils.Normalizers; -import org.onap.sdc.dcae.composition.restmodels.ruleeditor.*; -import org.onap.sdc.dcae.composition.util.DcaeBeConstants; -import org.onap.sdc.dcae.enums.ArtifactType; -import org.onap.sdc.dcae.enums.AssetType; -import org.onap.sdc.dcae.errormng.ActionStatus; -import org.onap.sdc.dcae.errormng.ErrConfMgr; -import org.onap.sdc.dcae.errormng.ErrConfMgr.ApiType; -import org.onap.sdc.dcae.errormng.ServiceException; -import org.onap.sdc.dcae.rule.editor.impl.RulesBusinessLogic; -import org.onap.sdc.dcae.rule.editor.utils.RulesPayloadUtils; -import org.onap.sdc.dcae.utils.SdcRestClientUtils; -import org.onap.sdc.dcae.ves.VesDataItemsDefinition; -import org.onap.sdc.dcae.ves.VesDataTypeDefinition; -import org.onap.sdc.dcae.ves.VesSimpleTypesEnum; -import org.onap.sdc.dcae.ves.VesStructureLoader; +import org.onap.sdc.dcae.composition.impl.RuleEditorBusinessLogic; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.util.Base64Utils; -import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; -import java.util.*; -import java.util.Map.Entry; -import java.util.stream.Collectors; -import java.util.stream.Stream; -@RestController -@EnableAutoConfiguration -@CrossOrigin -@RequestMapping("/rule-editor") +@RestController +@EnableAutoConfiguration +@CrossOrigin +@RequestMapping("/rule-editor") public class RuleEditorController extends BaseController { private static final String EXCEPTION = "Exception {}"; - @Autowired - private CompositionConfig compositionConfig; @Autowired - private RulesBusinessLogic rulesBusinessLogic; + private RuleEditorBusinessLogic ruleEditorBusinessLogic; @RequestMapping(value = "/list-events-by-versions", method = RequestMethod.GET) public ResponseEntity getEventsByVersion() { - try { - - Map<String, Set<String>> eventsByVersions = VesStructureLoader.getAvailableVersionsAndEventTypes(); - - List<EventTypesByVersionUI> resBody = eventsByVersions.entrySet().stream().map(entry -> { - Set<String> events = entry.getValue().stream().filter(event -> !EventTypesByVersionUI.DEFAULT_EVENTS.contains(event)).collect(Collectors.toSet()); - return new EventTypesByVersionUI(entry.getKey(), events); - }).collect(Collectors.toList()); - - debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Got a request to return all ves event types by versions {}", eventsByVersions); - return new ResponseEntity<>(resBody, HttpStatus.OK); - } catch (Exception e) { - errLogger.log(LogLevel.ERROR, this.getClass().getName(), EXCEPTION, e); - return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.VES_SCHEMA_NOT_FOUND); - } + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Starting getEventsByVersion"); + return ruleEditorBusinessLogic.getEventsByVersion(); } - @RequestMapping(value = { "/definition/{version:.*}/{eventType}" }, method = { RequestMethod.GET }, produces = { "application/json" }) + @RequestMapping(value = {"/definition/{version:.*}/{eventType}"}, method = {RequestMethod.GET}, produces = {"application/json"}) public ResponseEntity getDefinition(@PathVariable("version") String version, - @PathVariable("eventType") String eventType) { + @PathVariable("eventType") String eventType) { - try { - List<EventTypeDefinitionUI> result = getEventTypeDefinitionUIs(version, eventType); - - return new ResponseEntity<>(result, HttpStatus.OK); - - } catch (Exception e) { - errLogger.log(LogLevel.ERROR, this.getClass().getName(), EXCEPTION, e); - return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.VES_SCHEMA_NOT_FOUND); - } + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Starting getDefinition", version); + return ruleEditorBusinessLogic.getDefinition(version, eventType); } /** @@ -100,59 +48,16 @@ public class RuleEditorController extends BaseController { * 2. That the cdump holds a dcae component with such nid (to avoid orphan rules) * 3. Check that the fetched VFCMT is actually a VFCMT and not a regular VF */ - @RequestMapping(value = "/rule/{vfcmtUuid}/{dcaeCompLabel}/{nid}/{configParam}", method = { RequestMethod.POST }, produces = "application/json") + @RequestMapping(value = "/rule/{vfcmtUuid}/{dcaeCompLabel}/{nid}/{configParam:.*}", method = {RequestMethod.POST}, produces = "application/json") public ResponseEntity saveRule(@RequestBody String json, @ModelAttribute("requestId") String requestId, - @RequestHeader("USER_ID") String userId, - @PathVariable("vfcmtUuid") String vfcmtUuid, - @PathVariable("dcaeCompLabel") String dcaeCompLabel, - @PathVariable("nid") String nid, - @PathVariable("configParam") String configParam) { - try { - Rule rule = RulesPayloadUtils.parsePayloadToRule(json); - if (null == rule) { - return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.INVALID_RULE_FORMAT); - } - - List<ServiceException> errors = rulesBusinessLogic.validateRule(rule); - if(!errors.isEmpty()){ - return ErrConfMgr.INSTANCE.buildErrorArrayResponse(errors); - } - - ResourceDetailed vfcmt = baseBusinessLogic.getSdcRestClient().getResource(vfcmtUuid, requestId); - checkVfcmtType(vfcmt); - - if (CollectionUtils.isEmpty(vfcmt.getArtifacts())) { - return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.SAVE_RULE_FAILED); - } - - String artifactLabel = Normalizers.normalizeArtifactLabel(dcaeCompLabel + nid + configParam); - - // check for MappingRules artifact in existing artifacts - Artifact artifactFound = vfcmt.getArtifacts().stream() - .filter(a -> artifactLabel.equals(Normalizers.normalizeArtifactLabel(a.getArtifactLabel()))) - .findAny().orElse(null); - - // exception thrown if vfcmt is checked out and current user is not its owner - // performs vfcmt checkout if required - String vfcmtId = assertOwnershipOfVfcmtId(userId, vfcmt, requestId); - // new mappingRules artifact, validate nid exists in composition before creating new artifact - if (null == artifactFound) { - if(cdumpContainsNid(vfcmt, nid, requestId)) { - return saveNewRulesArtifact(rule, vfcmtId, generateMappingRulesFileName(dcaeCompLabel, nid, configParam), artifactLabel , userId, requestId); - } - return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.NODE_NOT_FOUND, "", dcaeCompLabel); - } - - //update artifact flow - append new rule or edit existing rule - return addOrEditRuleInArtifact(rule, vfcmtId, userId, artifactFound, requestId); - - } catch (JsonParseException je) { - errLogger.log(LogLevel.ERROR, this.getClass().getName(), "Error: Rule format is invalid: {}", je); - return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.INVALID_RULE_FORMAT, "", je.getMessage()); - } catch (Exception e) { - return handleException(e, ErrConfMgr.ApiType.SAVE_RULE_ARTIFACT); - } + @RequestHeader("USER_ID") String userId, + @PathVariable("vfcmtUuid") String vfcmtUuid, + @PathVariable("dcaeCompLabel") String dcaeCompLabel, + @PathVariable("nid") String nid, + @PathVariable("configParam") String configParam) { + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Starting saveRule", json); + return ruleEditorBusinessLogic.saveRule(json, requestId, userId, vfcmtUuid, dcaeCompLabel, nid, configParam); } @@ -165,7 +70,7 @@ public class RuleEditorController extends BaseController { * @param configParam - the name of the DCAE Component configuration property the rule is linked to * @return json representing the rule editor UI */ - @RequestMapping(value = "/rule/{vfcmtUuid}/{dcaeCompLabel}/{nid}/{configParam}", method = { RequestMethod.GET }, produces = "application/json") + @RequestMapping(value = "/rule/{vfcmtUuid}/{dcaeCompLabel}/{nid}/{configParam}", method = {RequestMethod.GET}, produces = "application/json") public ResponseEntity getRules( @PathVariable("vfcmtUuid") String vfcmtUuid, @PathVariable("dcaeCompLabel") String dcaeCompLabel, @@ -173,28 +78,8 @@ public class RuleEditorController extends BaseController { @PathVariable("configParam") String configParam, @ModelAttribute("requestId") String requestId) { - try { - ResourceDetailed vfcmt = baseBusinessLogic.getSdcRestClient().getResource(vfcmtUuid, requestId); - if (CollectionUtils.isEmpty(vfcmt.getArtifacts())) { - return new ResponseEntity<>("{}", HttpStatus.OK); - } - String artifactLabel = Normalizers.normalizeArtifactLabel(dcaeCompLabel + nid + configParam); - - // check for MappingRules artifact in existing artifacts - Artifact artifactListed = vfcmt.getArtifacts().stream().filter(a -> artifactLabel.equals(Normalizers.normalizeArtifactLabel(a.getArtifactLabel()))).findAny().orElse(null); - if (null == artifactListed) { - return new ResponseEntity<>("{}", HttpStatus.OK); - } - String ruleFile = baseBusinessLogic.getSdcRestClient().getResourceArtifact(vfcmtUuid, artifactListed.getArtifactUUID(), requestId); - - // To avoid opening the file for reading we search for the eventType and SchemaVer from the artifact metadata's description - SchemaInfo schemainfo = RulesPayloadUtils.extractInfoFromDescription(artifactListed); - List<EventTypeDefinitionUI> schema = null == schemainfo? new ArrayList<>() : getEventTypeDefinitionUIs(schemainfo.getVersion(), schemainfo.getEventType()); - return new ResponseEntity<>(RulesPayloadUtils.buildSchemaAndRulesResponse(ruleFile, schema), HttpStatus.OK); - } catch (Exception e) { - return handleException(e, ApiType.GET_RULE_ARTIFACT); - } - + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Starting getRules", vfcmtUuid); + return ruleEditorBusinessLogic.getRules(vfcmtUuid, dcaeCompLabel, nid, configParam, requestId); } /** @@ -204,10 +89,10 @@ public class RuleEditorController extends BaseController { * @param dcaeCompLabel - the name of the DCAE Component which the rule is applied to * @param nid - A unique id of the DCAE Component which the rule is applied to - exists also in the cdump * @param configParam - the name of the DCAE Component configuration property the rule is linked to - * @param ruleUid - the unique id of the rule to delete + * @param ruleUid - the unique id of the rule to delete * @return operation result */ - @RequestMapping(value = "/rule/{vfcmtUuid}/{dcaeCompLabel}/{nid}/{configParam}/{ruleUid}", method = { RequestMethod.DELETE }, produces = "application/json") + @RequestMapping(value = "/rule/{vfcmtUuid}/{dcaeCompLabel}/{nid}/{configParam}/{ruleUid}", method = {RequestMethod.DELETE}, produces = "application/json") public ResponseEntity deleteRule( @RequestHeader("USER_ID") String userId, @PathVariable("vfcmtUuid") String vfcmtUuid, @@ -215,44 +100,10 @@ public class RuleEditorController extends BaseController { @PathVariable("nid") String nid, @PathVariable("configParam") String configParam, @PathVariable("ruleUid") String ruleUid, - @ModelAttribute("requestId") String requestId){ - - try { - ResourceDetailed vfcmt = baseBusinessLogic.getSdcRestClient().getResource(vfcmtUuid, requestId); - if (null == vfcmt.getArtifacts()) { - errLogger.log(LogLevel.ERROR, this.getClass().getName(), "VFCMT {} doesn't have artifacts", vfcmtUuid); - return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.DELETE_RULE_FAILED); - } - String artifactLabel = Normalizers.normalizeArtifactLabel(dcaeCompLabel + nid + configParam); - - // check for MappingRules artifact in existing artifacts - Artifact mappingRuleFile = vfcmt.getArtifacts().stream() - .filter(a -> artifactLabel.equals(Normalizers.normalizeArtifactLabel(a.getArtifactLabel()))) - .findAny().orElse(null); - - if (null == mappingRuleFile) { - errLogger.log(LogLevel.ERROR, this.getClass().getName(), "{} doesn't exist for VFCMT {}", artifactLabel, vfcmtUuid); - return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.DELETE_RULE_FAILED); - } - - String vfcmtId = assertOwnershipOfVfcmtId(userId, vfcmt, requestId); - String payload = baseBusinessLogic.getSdcRestClient().getResourceArtifact(vfcmtId, mappingRuleFile.getArtifactUUID(), requestId); - MappingRules rules = RulesPayloadUtils.parseMappingRulesArtifactPayload(payload); - Rule removedRule = rulesBusinessLogic.deleteRule(rules, ruleUid); - if(null == removedRule){ - errLogger.log(LogLevel.ERROR, this.getClass().getName(), "Rule {} not found.", ruleUid); - return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.DELETE_RULE_FAILED); - } - if(rules.isEmpty()){ // if file doesn't contain any rules after last deletion -> let's delete the file - baseBusinessLogic.getSdcRestClient().deleteResourceArtifact(userId, vfcmtId, mappingRuleFile.getArtifactUUID(), requestId); - } else { - updateRulesArtifact(vfcmtId, userId, mappingRuleFile, rules, requestId); - } - return checkInAndReturnSaveArtifactResult(removedRule, vfcmtId, userId, requestId); - } catch (Exception e) { - return handleException(e, ApiType.SAVE_RULE_ARTIFACT); - } + @ModelAttribute("requestId") String requestId) { + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Starting deleteRule", vfcmtUuid); + return ruleEditorBusinessLogic.deleteRule(userId, vfcmtUuid, dcaeCompLabel, nid, configParam, ruleUid, requestId); } /** @@ -262,7 +113,7 @@ public class RuleEditorController extends BaseController { * @param dcaeCompLabel - the name of the DCAE Component which the rule is applied to * @param nid - A unique id of the DCAE Component which the rule is applied to - exists also in the cdump * @param configParam - the name of the DCAE Component configuration property the rule is linked to - * @param flowType - the mapping rules flow type (SNMP,Syslog,FOI) + * @param flowType - the mapping rules flow type (SNMP,Syslog,FOI) * @return translateJson representing the translated Rules * Validations: * 1. That the user is able to edit the VFCMT @@ -270,184 +121,25 @@ public class RuleEditorController extends BaseController { * 3. Check that the fetched VFCMT is actually a VFCMT and not a regular VF * @throws Exception */ - @RequestMapping(value = "/rule/translate/{vfcmtUuid}/{dcaeCompLabel}/{nid}/{configParam}", method = { RequestMethod.GET }, produces = "application/json") + @RequestMapping(value = "/rule/translate/{vfcmtUuid}/{dcaeCompLabel}/{nid}/{configParam}", method = {RequestMethod.GET}, produces = "application/json") public ResponseEntity translateRules(@PathVariable("vfcmtUuid") String vfcmtUuid, @ModelAttribute("requestId") String requestId, - @PathVariable("dcaeCompLabel") String dcaeCompLabel, - @PathVariable("nid") String nid, - @PathVariable("configParam") String configParam, - @RequestParam("flowType") String flowType) throws Exception { - - try { + @PathVariable("dcaeCompLabel") String dcaeCompLabel, + @PathVariable("nid") String nid, + @PathVariable("configParam") String configParam, + @RequestParam("flowType") String flowType) { - if (StringUtils.isBlank(flowType) || MapUtils.isEmpty(compositionConfig.getFlowTypesMap()) || null == compositionConfig.getFlowTypesMap().get(flowType)) { - return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.TRANSLATE_FAILED, "", "Flow type " + flowType + " not found"); - } - - // extract entry phase name and last phase name from configuration: - String entryPointPhaseName = compositionConfig.getFlowTypesMap().get(flowType).getEntryPointPhaseName(); - String lastPhaseName = compositionConfig.getFlowTypesMap().get(flowType).getLastPhaseName(); - - ResourceDetailed vfcmt = baseBusinessLogic.getSdcRestClient().getResource(vfcmtUuid, requestId); - checkVfcmtType(vfcmt); - - if (CollectionUtils.isEmpty(vfcmt.getArtifacts())) { - return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.TRANSLATE_FAILED, "", "No rules found on VFCMT " + vfcmtUuid); - } - String artifactLabel = Normalizers.normalizeArtifactLabel(dcaeCompLabel + nid + configParam); - - // check for MappingRules artifact in existing artifacts - Artifact rulesArtifact = vfcmt.getArtifacts().stream().filter(a -> artifactLabel.equals(Normalizers.normalizeArtifactLabel(a.getArtifactLabel()))).findAny().orElse(null); - - if (rulesArtifact == null) { - return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.TRANSLATE_FAILED, "", artifactLabel + " doesn't exist on VFCMT " + vfcmtUuid); - } - - String payload = baseBusinessLogic.getSdcRestClient().getResourceArtifact(vfcmtUuid, rulesArtifact.getArtifactUUID(), requestId); - debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Retrieved mapping rules artifact {}, start parsing rules...", artifactLabel); - MappingRules rules = RulesPayloadUtils.parseMappingRulesArtifactPayload(payload); - debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Finished parsing rules, calling validator..."); - List<ServiceException> errors = rulesBusinessLogic.validateRules(rules); - if (!errors.isEmpty()) { - return ErrConfMgr.INSTANCE.buildErrorArrayResponse(errors); - } - - debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Validation completed successfully, calling translator..."); - String translateJson = rulesBusinessLogic.translateRules(rules, entryPointPhaseName, lastPhaseName, vfcmt.getName()); - debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Translation completed successfully"); - return new ResponseEntity<>(translateJson, HttpStatus.OK); - } catch (Exception e) { - return handleException(e, ApiType.SAVE_RULE_ARTIFACT); - } + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Starting translateRules", vfcmtUuid); + return ruleEditorBusinessLogic.translateRules(vfcmtUuid, requestId, dcaeCompLabel, nid, configParam, flowType); } - ///////////////////PRIVATE METHODS//////////////////////////////////////////////////////////////////////// - - private String assertOwnershipOfVfcmtId(String userId, ResourceDetailed vfcmt, String requestId) throws Exception { - checkUserIfResourceCheckedOut(userId, vfcmt); - String newVfcmtId = vfcmt.getUuid(); // may change after checking out a certified vfcmt - if (isNeedToCheckOut(vfcmt.getLifecycleState())) { - Asset result = checkout(userId, newVfcmtId, AssetType.RESOURCE, requestId); - if (result != null) { - newVfcmtId = result.getUuid(); - debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "New resource after checkout is: {}", newVfcmtId); - } - } - return newVfcmtId; - } - - - - // called after validating vfcmt.getArtifacts() is not null - private boolean cdumpContainsNid(ResourceDetailed vfcmt, String nid, String requestId) { - Artifact cdump = vfcmt.getArtifacts().stream() - .filter(a -> DcaeBeConstants.Composition.fileNames.COMPOSITION_YML.equalsIgnoreCase(a.getArtifactName())) - .findAny().orElse(null); - if (null == cdump || null == cdump.getArtifactUUID()) { - errLogger.log(LogLevel.ERROR, this.getClass().getName(), "No {} found on vfcmt {}", DcaeBeConstants.Composition.fileNames.COMPOSITION_YML, vfcmt.getUuid()); - return false; - } - try { - String artifact = baseBusinessLogic.getSdcRestClient().getResourceArtifact(vfcmt.getUuid(), cdump.getArtifactUUID(), requestId); - if (!artifact.contains("\"nid\":\""+nid)) { - errLogger.log(LogLevel.ERROR, this.getClass().getName(), "{} doesn't contain nid {}. Cannot save mapping rule file", DcaeBeConstants.Composition.fileNames.COMPOSITION_YML, nid); - return false; - } - } catch (Exception e) { - errLogger.log(LogLevel.ERROR, this.getClass().getName(), EXCEPTION, e); - return false; - } - return true; - } - - private ResponseEntity<String> saveNewRulesArtifact(Rule rule, String vfcmtUuid, String artifactFileName, String artifactLabel, String userId, String requestId) throws Exception { - MappingRules body = new MappingRules(rule); - Artifact artifact = SdcRestClientUtils.generateDeploymentArtifact(body.describe(), artifactFileName, ArtifactType.OTHER.name(), artifactLabel, body.convertToPayload()); - baseBusinessLogic.getSdcRestClient().createResourceArtifact(userId, vfcmtUuid, artifact, requestId); - return checkInAndReturnSaveArtifactResult(rule, vfcmtUuid, userId, requestId); - } - - private ResponseEntity addOrEditRuleInArtifact(Rule rule, String vfcmtUuid, String userId, Artifact rulesArtifact, String requestId) throws Exception { - String payload = baseBusinessLogic.getSdcRestClient().getResourceArtifact(vfcmtUuid, rulesArtifact.getArtifactUUID(), requestId); - MappingRules rules = RulesPayloadUtils.parseMappingRulesArtifactPayload(payload); - - // in case the rule id is passed but the rule doesn't exist on the mapping rule file: - if(!rulesBusinessLogic.addOrEditRule(rules, rule)) { - return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.SAVE_RULE_FAILED); - } - updateRulesArtifact(vfcmtUuid, userId, rulesArtifact, rules, requestId); - return checkInAndReturnSaveArtifactResult(rule, vfcmtUuid, userId, requestId); - } - - // regardless of check in result, return save artifact success - private ResponseEntity<String> checkInAndReturnSaveArtifactResult(Rule rule, String vfcmtUuid, String userId, String requestId) { - try { - checkin(userId, vfcmtUuid, AssetType.RESOURCE, requestId); - } catch (Exception e) { - // swallowing the exception intentionally since it is on the check in action - errLogger.log(LogLevel.ERROR, this.getClass().getName(), "Error occurred while performing check in on VFCMT {}:{}", vfcmtUuid, e); - } - return new ResponseEntity<>(rule.toJson(), HttpStatus.OK); - } - - private void updateRulesArtifact(String vfcmtUuid, String userId, Artifact artifactInfo, MappingRules rules, String requestId) throws Exception { - artifactInfo.setPayloadData(Base64Utils.encodeToString(rules.convertToPayload())); - // POST must contain 'description' while GET returns 'artifactDescription' - artifactInfo.setDescription(artifactInfo.getArtifactDescription()); - baseBusinessLogic.getSdcRestClient().updateResourceArtifact(userId, vfcmtUuid, artifactInfo, requestId); - } - - - /** - * @param eventMapStream - * @param parent - * @param path - * @return - */ - private List<EventTypeDefinitionUI> convertToEventTypeDefinition(Stream<Entry<String, VesDataTypeDefinition>> eventMapStream, VesDataTypeDefinition parent, String path) { - - return eventMapStream.map(entry -> { - Map<String, VesDataTypeDefinition> properties = entry.getValue().getProperties(); - VesDataItemsDefinition items = entry.getValue().getItems(); - String newPath = path + "." + entry.getKey(); - List<EventTypeDefinitionUI> children = (properties == null) ? null : convertToEventTypeDefinition(properties.entrySet().stream(), entry.getValue(), newPath); - if(VesSimpleTypesEnum.ARRAY.getType().equals(entry.getValue().getType())) { - newPath += "[]"; - if(innerTypeIsComplex(items)) { - children = convertComplexArrayType(items, newPath); - } else if(innerTypeIsArray(items)) { - newPath += "[]"; - } - } - - boolean isRequired = (parent != null) ? parent.getRequired().contains(entry.getKey()) : false; - return new EventTypeDefinitionUI(entry.getKey(), children, isRequired, newPath); - }).collect(Collectors.toList()); - } - - private boolean innerTypeIsComplex(VesDataItemsDefinition items){ - return items != null && items.stream().anyMatch(p -> p.getProperties() != null); - } - - private boolean innerTypeIsArray(VesDataItemsDefinition items){ - return items != null && items.stream().anyMatch(p -> p.getItems() != null); - } - - private List<EventTypeDefinitionUI> convertComplexArrayType(VesDataItemsDefinition items, String path){ - return items.stream().map(item -> item.getProperties() != null ? convertToEventTypeDefinition(item.getProperties().entrySet().stream(), item, path) : new ArrayList<EventTypeDefinitionUI>()) - .flatMap(List::stream).collect(Collectors.toList()); - } - - - private String generateMappingRulesFileName(String dcaeCompLabel, String nid, String configParam) { - return dcaeCompLabel + "_" + nid + "_" + configParam + DcaeBeConstants.Composition.fileNames.MAPPING_RULE_POSTFIX; + @RequestMapping(value = "/getExistingRuleTargets/{vfcmtUuid}/{dcaeCompLabel}/{nid:.*}", method = {RequestMethod.GET}, produces = "application/json") + public ResponseEntity getExistingRuleTargets(@PathVariable("vfcmtUuid") String vfcmtUuid, @ModelAttribute("requestId") String requestId, + @PathVariable("dcaeCompLabel") String dcaeCompLabel, + @PathVariable("nid") String nid) { + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Starting getExistingRuleTargets ", vfcmtUuid); + return ruleEditorBusinessLogic.getExistingRuleTargets(vfcmtUuid, requestId, dcaeCompLabel, nid); } - private List<EventTypeDefinitionUI> getEventTypeDefinitionUIs(String version, String eventType) { - List<String> eventNamesToReturn = ListUtils.union(EventTypesByVersionUI.DEFAULT_EVENTS, Arrays.asList(eventType)); - Map<String, VesDataTypeDefinition> eventDefs = VesStructureLoader.getEventListenerDefinitionByVersion(version); - Stream<Entry<String, VesDataTypeDefinition>> filteredEvents = eventDefs.entrySet().stream().filter(entry -> eventNamesToReturn.contains(entry.getKey())); - return convertToEventTypeDefinition(filteredEvents, null, "event"); - } } |