diff --git a/model/src/main/java/eu/europa/ec/fisheries/uvms/rules/model/mapper/RulesModuleRequestMapper.java b/model/src/main/java/eu/europa/ec/fisheries/uvms/rules/model/mapper/RulesModuleRequestMapper.java index d1089effc..1795f050a 100755 --- a/model/src/main/java/eu/europa/ec/fisheries/uvms/rules/model/mapper/RulesModuleRequestMapper.java +++ b/model/src/main/java/eu/europa/ec/fisheries/uvms/rules/model/mapper/RulesModuleRequestMapper.java @@ -33,11 +33,12 @@ public static String createSetMovementReportRequest(PluginType type, RawMovement public static String createSetFLUXMovementReportRequest(PluginType type, String fluxFAReportMessage, String username, String logId, String fluxDataFlow, String senderOrReceiver, String onValue, - String registeredClassName, String ad, String to, String todt) throws RulesModelMapperException { + String registeredClassName, String ad, String to, String todt, Date date) throws RulesModelMapperException { SetFLUXMovementReportRequest request = new SetFLUXMovementReportRequest(); request.setMethod(RulesModuleMethod.RECEIVE_MOVEMENT_BATCH); request.setRequest(fluxFAReportMessage); request.setType(type); + request.setDate(date); populateCommonProperties(request, username, logId, fluxDataFlow, senderOrReceiver, onValue, registeredClassName, ad, to, todt); return JAXBMarshaller.marshallJaxBObjectToString(request); } @@ -50,11 +51,12 @@ public static String createGetTicketsAndRulesByMovementsRequest(List mov } public static String createSetFLUXFAReportMessageRequest(PluginType type, String fluxFAReportMessage, String username, - String logId, String fluxDataFlow, String senderOrReceiver, String onValue) throws RulesModelMapperException { + String logId, String fluxDataFlow, String senderOrReceiver, String onValue, Date date) throws RulesModelMapperException { SetFLUXFAReportMessageRequest request = new SetFLUXFAReportMessageRequest(); request.setMethod(RulesModuleMethod.SET_FLUX_FA_REPORT); request.setRequest(fluxFAReportMessage); request.setPluginType(type); + request.setDate(date); populateCommonProperties(request, username, logId, fluxDataFlow, senderOrReceiver, onValue); return JAXBMarshaller.marshallJaxBObjectToString(request); } @@ -70,11 +72,12 @@ public static String createSendFLUXFAReportMessageRequest(String fluxFAReportMes } public static String createSetFaQueryMessageRequest(PluginType type, String faQueryMessageStr, String username, - String logId, String fluxDataFlow, String senderOrReceiver, String onValue) throws RulesModelMapperException { + String logId, String fluxDataFlow, String senderOrReceiver, String onValue, Date date) throws RulesModelMapperException { SetFaQueryMessageRequest request = new SetFaQueryMessageRequest(); request.setMethod(RulesModuleMethod.SET_FLUX_FA_QUERY); request.setRequest(faQueryMessageStr); request.setPluginType(type); + request.setDate(date); populateCommonProperties(request, username, logId, fluxDataFlow, senderOrReceiver, onValue); return JAXBMarshaller.marshallJaxBObjectToString(request); } diff --git a/service/src/main/java/eu/europa/ec/fisheries/uvms/rules/service/bean/activity/RulesFaQueryServiceBean.java b/service/src/main/java/eu/europa/ec/fisheries/uvms/rules/service/bean/activity/RulesFaQueryServiceBean.java index 77ae4bf52..f9e4c62df 100644 --- a/service/src/main/java/eu/europa/ec/fisheries/uvms/rules/service/bean/activity/RulesFaQueryServiceBean.java +++ b/service/src/main/java/eu/europa/ec/fisheries/uvms/rules/service/bean/activity/RulesFaQueryServiceBean.java @@ -21,12 +21,15 @@ import eu.europa.ec.fisheries.uvms.rules.message.consumer.bean.ActivityOutQueueConsumer; import eu.europa.ec.fisheries.uvms.rules.message.producer.bean.RulesActivityProducerBean; import eu.europa.ec.fisheries.uvms.rules.message.producer.bean.RulesExchangeProducerBean; +import eu.europa.ec.fisheries.uvms.rules.service.MDRCacheRuleService; import eu.europa.ec.fisheries.uvms.rules.service.bean.RulePostProcessBean; import eu.europa.ec.fisheries.uvms.rules.service.bean.RulesConfigurationCache; import eu.europa.ec.fisheries.uvms.rules.service.bean.RulesEngineBean; import eu.europa.ec.fisheries.uvms.rules.service.bean.RulesExchangeServiceBean; import eu.europa.ec.fisheries.uvms.rules.service.business.AbstractFact; +import eu.europa.ec.fisheries.uvms.rules.service.business.RuleFromMDR; import eu.europa.ec.fisheries.uvms.rules.service.business.ValidationResult; +import eu.europa.ec.fisheries.uvms.rules.service.business.helper.RuleApplicabilityChecker; import eu.europa.ec.fisheries.uvms.rules.service.config.ExtraValueType; import eu.europa.ec.fisheries.uvms.rules.service.constants.Rule9998Or9999ErrorType; import eu.europa.ec.fisheries.uvms.rules.service.exception.RulesServiceException; @@ -34,6 +37,7 @@ import eu.europa.ec.fisheries.uvms.rules.service.mapper.RulesFLUXMessageHelper; import eu.europa.ec.fisheries.uvms.rules.service.mapper.xpath.util.XPathRepository; import lombok.extern.slf4j.Slf4j; +import org.joda.time.DateTime; import org.slf4j.MDC; import un.unece.uncefact.data.standard.fluxfaquerymessage._3.FLUXFAQueryMessage; import un.unece.uncefact.data.standard.fluxresponsemessage._6.FLUXResponseMessage; @@ -43,6 +47,7 @@ import javax.ejb.EJB; import javax.ejb.LocalBean; import javax.ejb.Stateless; +import javax.inject.Inject; import javax.jms.JMSException; import javax.jms.TextMessage; import javax.xml.bind.JAXBException; @@ -97,6 +102,12 @@ public class RulesFaQueryServiceBean { @EJB private RulesFaReportServiceBean faReportRulesMessageBean; + @Inject + private MDRCacheRuleService mdrCacheRuleService; + + @Inject + private RuleApplicabilityChecker appliChecker; + private RulesFLUXMessageHelper fluxMessageHelper; @PostConstruct @@ -130,6 +141,10 @@ public void evaluateIncomingFAQuery(SetFaQueryMessageRequest request) { idsFromIncomingMessage.removeAll(faQueryIdsFromDb); + List authRules = mdrCacheRuleService.getFaBrsForBrId("FA-L00-00-9999"); + RuleFromMDR authRule = authRules.get(0); + boolean rule9999IsActivated = appliChecker.isApplicable("FA-L00-00-9999", authRule.getContext(), request.getFluxDataFlow(), new DateTime(request.getDate()), mdrCacheRuleService); + ValidationResult faQueryValidationReport = rulePostProcessBean.checkAndUpdateValidationResult(faQueryFacts, requestStr, exchangeLogGuid, RawMsgType.FA_QUERY); // exchangeServiceBean.updateExchangeMessage(exchangeLogGuid, fluxMessageHelper.calculateMessageValidationStatus(faQueryValidationReport)); rulesDaoBean.createFaDocumentIdEntity(idsFromIncomingMessage); @@ -137,7 +152,7 @@ public void evaluateIncomingFAQuery(SetFaQueryMessageRequest request) { if (faQueryValidationReport != null && !faQueryValidationReport.isError()) { log.debug("The Validation of FaQueryMessage is successful, going to check permissions (Subscriptions).."); setFLUXFAReportMessageRequest = sendSyncQueryRequestToActivity(requestStr, request.getUsername(), request.getPluginType(), exchangeLogGuid); - if (setFLUXFAReportMessageRequest.isIsPermitted()) { // Send query to activity. + if (setFLUXFAReportMessageRequest.isIsPermitted() || !rule9999IsActivated) { // Send query to activity. log.debug("Request has permissions. Going to send FaQuery to Activity Module..."); if (setFLUXFAReportMessageRequest.isIsEmptyReport()) { log.info("[WARN] The report generated from Activity doesn't contain data (Empty report)!"); diff --git a/service/src/main/java/eu/europa/ec/fisheries/uvms/rules/service/bean/activity/RulesFaReportServiceBean.java b/service/src/main/java/eu/europa/ec/fisheries/uvms/rules/service/bean/activity/RulesFaReportServiceBean.java index 784749edc..8f3429e24 100644 --- a/service/src/main/java/eu/europa/ec/fisheries/uvms/rules/service/bean/activity/RulesFaReportServiceBean.java +++ b/service/src/main/java/eu/europa/ec/fisheries/uvms/rules/service/bean/activity/RulesFaReportServiceBean.java @@ -31,6 +31,7 @@ This file is part of the Integrated Fisheries Data Management (IFDM) Suite. The import eu.europa.ec.fisheries.uvms.rules.message.consumer.RulesResponseConsumer; import eu.europa.ec.fisheries.uvms.rules.message.producer.bean.RulesActivityProducerBean; import eu.europa.ec.fisheries.uvms.rules.message.producer.bean.RulesExchangeProducerBean; +import eu.europa.ec.fisheries.uvms.rules.service.MDRCacheRuleService; import eu.europa.ec.fisheries.uvms.rules.service.bean.RulePostProcessBean; import eu.europa.ec.fisheries.uvms.rules.service.bean.RulesConfigurationCache; import eu.europa.ec.fisheries.uvms.rules.service.bean.RulesEngineBean; @@ -38,7 +39,9 @@ This file is part of the Integrated Fisheries Data Management (IFDM) Suite. The import eu.europa.ec.fisheries.uvms.rules.service.bean.permission.PermissionData; import eu.europa.ec.fisheries.uvms.rules.service.bean.asset.client.impl.AssetClientBean; import eu.europa.ec.fisheries.uvms.rules.service.business.AbstractFact; +import eu.europa.ec.fisheries.uvms.rules.service.business.RuleFromMDR; import eu.europa.ec.fisheries.uvms.rules.service.business.ValidationResult; +import eu.europa.ec.fisheries.uvms.rules.service.business.helper.RuleApplicabilityChecker; import eu.europa.ec.fisheries.uvms.rules.service.config.ExtraValueType; import eu.europa.ec.fisheries.uvms.rules.service.exception.RulesServiceException; import eu.europa.ec.fisheries.uvms.rules.service.exception.RulesValidationException; @@ -47,6 +50,7 @@ This file is part of the Integrated Fisheries Data Management (IFDM) Suite. The import eu.europa.ec.fisheries.uvms.rules.service.mapper.xpath.util.XPathRepository; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; +import org.joda.time.DateTime; import org.slf4j.MDC; import un.unece.uncefact.data.standard.fluxfareportmessage._3.FLUXFAReportMessage; import un.unece.uncefact.data.standard.fluxresponsemessage._6.FLUXResponseMessage; @@ -107,6 +111,12 @@ public class RulesFaReportServiceBean { @EJB private RulesDao rulesDaoBean; + @Inject + private MDRCacheRuleService mdrCacheRuleService; + + @Inject + private RuleApplicabilityChecker appliChecker; + private RulesFLUXMessageHelper fluxMessageHelper; @PostConstruct @@ -166,7 +176,12 @@ public void evaluateIncomingFLUXFAReport(SetFLUXFAReportMessageRequest request) } public void completeIncomingFLUXFAReportEvaluation(PermissionData permissionData) { - if (permissionData.isRequestPermitted()) { + SetFLUXFAReportMessageRequest request = permissionData.getRequest(); + List authRules = mdrCacheRuleService.getFaBrsForBrId("FA-L00-00-9999"); + RuleFromMDR authRule = authRules.get(0); + boolean rule9999IsActivated = appliChecker.isApplicable("FA-L00-00-9999", authRule.getContext(), request.getFluxDataFlow(), new DateTime(request.getDate()), mdrCacheRuleService); + + if (permissionData.isRequestPermitted() || !rule9999IsActivated) { log.debug(" Request has permissions. Going to send FaReportMessage to Activity Module..."); rulesDaoBean.saveFaIdsPerTripList(permissionData.getFaIdsPerTripsFromMessage()); Set result = permissionData.getIdsFromIncomingMessage().stream().filter(faDocumentID -> !FAUUIDType.FA_REPORT_REF_ID.equals(faDocumentID.getType())).collect(Collectors.toSet()); diff --git a/service/src/main/java/eu/europa/ec/fisheries/uvms/rules/service/bean/movement/RulesMovementProcessorBean.java b/service/src/main/java/eu/europa/ec/fisheries/uvms/rules/service/bean/movement/RulesMovementProcessorBean.java index 794c14cde..ed0d38cf3 100644 --- a/service/src/main/java/eu/europa/ec/fisheries/uvms/rules/service/bean/movement/RulesMovementProcessorBean.java +++ b/service/src/main/java/eu/europa/ec/fisheries/uvms/rules/service/bean/movement/RulesMovementProcessorBean.java @@ -19,6 +19,34 @@ import static eu.europa.ec.fisheries.uvms.rules.service.config.ExtraValueType.SENDER_RECEIVER; import static eu.europa.ec.fisheries.uvms.rules.service.config.ExtraValueType.XML; +import javax.annotation.PostConstruct; +import javax.ejb.EJB; +import javax.ejb.LocalBean; +import javax.ejb.Stateless; +import javax.enterprise.event.Event; +import javax.inject.Inject; +import javax.jms.JMSException; +import javax.jms.TextMessage; +import javax.xml.bind.JAXBException; +import java.nio.file.AccessDeniedException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.FutureTask; +import java.util.stream.Collectors; + import eu.europa.ec.fisheries.remote.RulesDomainModel; import eu.europa.ec.fisheries.schema.config.module.v1.SettingsListResponse; import eu.europa.ec.fisheries.schema.config.types.v1.SettingType; @@ -29,7 +57,14 @@ import eu.europa.ec.fisheries.schema.exchange.plugin.types.v1.PluginType; import eu.europa.ec.fisheries.schema.exchange.v1.ExchangeLogStatusTypeType; import eu.europa.ec.fisheries.schema.mobileterminal.module.v1.MobileTerminalBatchListElement; -import eu.europa.ec.fisheries.schema.mobileterminal.types.v1.*; +import eu.europa.ec.fisheries.schema.mobileterminal.types.v1.ComChannelAttribute; +import eu.europa.ec.fisheries.schema.mobileterminal.types.v1.ComChannelType; +import eu.europa.ec.fisheries.schema.mobileterminal.types.v1.ListCriteria; +import eu.europa.ec.fisheries.schema.mobileterminal.types.v1.ListPagination; +import eu.europa.ec.fisheries.schema.mobileterminal.types.v1.MobileTerminalListQuery; +import eu.europa.ec.fisheries.schema.mobileterminal.types.v1.MobileTerminalSearchCriteria; +import eu.europa.ec.fisheries.schema.mobileterminal.types.v1.MobileTerminalType; +import eu.europa.ec.fisheries.schema.mobileterminal.types.v1.SearchKey; import eu.europa.ec.fisheries.schema.movement.common.v1.SimpleResponse; import eu.europa.ec.fisheries.schema.movement.module.v1.CreateMovementBatchResponse; import eu.europa.ec.fisheries.schema.movement.module.v1.CreateMovementResponse; @@ -50,7 +85,6 @@ import eu.europa.ec.fisheries.schema.rules.customrule.v1.UpdateSubscriptionType; import eu.europa.ec.fisheries.schema.rules.mobileterminal.v1.IdList; import eu.europa.ec.fisheries.schema.rules.module.v1.GetTicketsAndRulesByMovementsResponse; -import eu.europa.ec.fisheries.schema.rules.module.v1.RulesBaseRequest; import eu.europa.ec.fisheries.schema.rules.module.v1.SendFLUXMovementReportRequest; import eu.europa.ec.fisheries.schema.rules.module.v1.SetFLUXMovementReportRequest; import eu.europa.ec.fisheries.schema.rules.movement.v1.MovementSourceType; @@ -86,7 +120,13 @@ import eu.europa.ec.fisheries.uvms.movement.model.mapper.MovementModuleRequestMapper; import eu.europa.ec.fisheries.uvms.movement.model.mapper.MovementModuleResponseMapper; import eu.europa.ec.fisheries.uvms.rules.message.consumer.RulesResponseConsumer; -import eu.europa.ec.fisheries.uvms.rules.message.producer.bean.*; +import eu.europa.ec.fisheries.uvms.rules.message.producer.bean.MovementOutQueueProducer; +import eu.europa.ec.fisheries.uvms.rules.message.producer.bean.RulesAuditProducerBean; +import eu.europa.ec.fisheries.uvms.rules.message.producer.bean.RulesConfigProducerBean; +import eu.europa.ec.fisheries.uvms.rules.message.producer.bean.RulesExchangeProducerBean; +import eu.europa.ec.fisheries.uvms.rules.message.producer.bean.RulesMobilTerminalProducerBean; +import eu.europa.ec.fisheries.uvms.rules.message.producer.bean.RulesMovementProducerBean; +import eu.europa.ec.fisheries.uvms.rules.message.producer.bean.RulesUserProducerBean; import eu.europa.ec.fisheries.uvms.rules.model.constant.AuditObjectTypeEnum; import eu.europa.ec.fisheries.uvms.rules.model.constant.AuditOperationEnum; import eu.europa.ec.fisheries.uvms.rules.model.dto.AlarmListResponseDto; @@ -96,13 +136,22 @@ import eu.europa.ec.fisheries.uvms.rules.model.exception.RulesModelMapperException; import eu.europa.ec.fisheries.uvms.rules.model.exception.RulesModelMarshallException; import eu.europa.ec.fisheries.uvms.rules.model.mapper.JAXBMarshaller; +import eu.europa.ec.fisheries.uvms.rules.service.MDRCacheRuleService; import eu.europa.ec.fisheries.uvms.rules.service.bean.RulePostProcessBean; import eu.europa.ec.fisheries.uvms.rules.service.bean.RulesConfigurationCache; import eu.europa.ec.fisheries.uvms.rules.service.bean.RulesEngineBean; import eu.europa.ec.fisheries.uvms.rules.service.bean.RulesExchangeServiceBean; import eu.europa.ec.fisheries.uvms.rules.service.bean.asset.client.impl.AssetClientBean; import eu.europa.ec.fisheries.uvms.rules.service.bean.mdr.MDRCache; -import eu.europa.ec.fisheries.uvms.rules.service.business.*; +import eu.europa.ec.fisheries.uvms.rules.service.business.AbstractFact; +import eu.europa.ec.fisheries.uvms.rules.service.business.MovementFact; +import eu.europa.ec.fisheries.uvms.rules.service.business.PreviousReportFact; +import eu.europa.ec.fisheries.uvms.rules.service.business.RawMovementFact; +import eu.europa.ec.fisheries.uvms.rules.service.business.RuleError; +import eu.europa.ec.fisheries.uvms.rules.service.business.RuleFromMDR; +import eu.europa.ec.fisheries.uvms.rules.service.business.RulesUtil; +import eu.europa.ec.fisheries.uvms.rules.service.business.ValidationResult; +import eu.europa.ec.fisheries.uvms.rules.service.business.helper.RuleApplicabilityChecker; import eu.europa.ec.fisheries.uvms.rules.service.config.ExtraValueType; import eu.europa.ec.fisheries.uvms.rules.service.constants.MDRAcronymType; import eu.europa.ec.fisheries.uvms.rules.service.constants.Rule9998Or9999ErrorType; @@ -114,11 +163,24 @@ import eu.europa.ec.fisheries.uvms.rules.service.exception.InputArgumentException; import eu.europa.ec.fisheries.uvms.rules.service.exception.RulesServiceException; import eu.europa.ec.fisheries.uvms.rules.service.exception.RulesValidationException; -import eu.europa.ec.fisheries.uvms.rules.service.mapper.*; +import eu.europa.ec.fisheries.uvms.rules.service.mapper.AssetAssetIdMapper; +import eu.europa.ec.fisheries.uvms.rules.service.mapper.ExchangeMovementMapper; +import eu.europa.ec.fisheries.uvms.rules.service.mapper.MobileTerminalMapper; +import eu.europa.ec.fisheries.uvms.rules.service.mapper.MovementBaseTypeMapper; +import eu.europa.ec.fisheries.uvms.rules.service.mapper.MovementFactMapper; +import eu.europa.ec.fisheries.uvms.rules.service.mapper.RawMovementFactMapper; +import eu.europa.ec.fisheries.uvms.rules.service.mapper.RulesFLUXMessageHelper; import eu.europa.ec.fisheries.uvms.user.model.mapper.UserModuleRequestMapper; import eu.europa.ec.fisheries.wsdl.asset.group.AssetGroup; import eu.europa.ec.fisheries.wsdl.asset.module.GetAssetModuleRequest; -import eu.europa.ec.fisheries.wsdl.asset.types.*; +import eu.europa.ec.fisheries.wsdl.asset.types.Asset; +import eu.europa.ec.fisheries.wsdl.asset.types.AssetIdType; +import eu.europa.ec.fisheries.wsdl.asset.types.AssetListCriteria; +import eu.europa.ec.fisheries.wsdl.asset.types.AssetListCriteriaPair; +import eu.europa.ec.fisheries.wsdl.asset.types.AssetListPagination; +import eu.europa.ec.fisheries.wsdl.asset.types.AssetListQuery; +import eu.europa.ec.fisheries.wsdl.asset.types.BatchAssetListResponseElement; +import eu.europa.ec.fisheries.wsdl.asset.types.ConfigSearchField; import eu.europa.ec.fisheries.wsdl.user.module.GetContactDetailResponse; import eu.europa.ec.fisheries.wsdl.user.module.GetUserContextResponse; import eu.europa.ec.fisheries.wsdl.user.types.Feature; @@ -127,24 +189,11 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.joda.time.DateTime; import un.unece.uncefact.data.standard.fluxvesselpositionmessage._4.FLUXVesselPositionMessage; import un.unece.uncefact.data.standard.mdr.communication.ObjectRepresentation; import un.unece.uncefact.data.standard.unqualifieddatatype._18.IDType; -import javax.annotation.PostConstruct; -import javax.ejb.EJB; -import javax.ejb.LocalBean; -import javax.ejb.Stateless; -import javax.enterprise.event.Event; -import javax.inject.Inject; -import javax.jms.JMSException; -import javax.jms.TextMessage; -import javax.xml.bind.JAXBException; -import java.nio.file.AccessDeniedException; -import java.util.*; -import java.util.concurrent.*; -import java.util.stream.Collectors; - @Stateless @LocalBean @@ -217,6 +266,12 @@ public class RulesMovementProcessorBean { @Inject @AlarmReportCountEvent private Event alarmReportCountEvent; + + @Inject + private MDRCacheRuleService mdrCacheRuleService; + + @Inject + private RuleApplicabilityChecker appliChecker; private Map mapToMovementType; @@ -328,8 +383,12 @@ private void enrichAndSenMovementsAsBatch(ValidationResult validationResult, Lis EnrichedMovementWrapper enrichedWrapper = enrichBatchWithMobileTerminalAndAssets(rawMovements); CreateMovementBatchResponse movementBatchResponse = sendBatchToMovement(enrichedWrapper.getAssetList(), rawMovements, username); ExchangeLogStatusTypeType status; - if (movementBatchResponse != null && SimpleResponse.OK.equals(movementBatchResponse.getPermitted())) { - if (SimpleResponse.OK.equals(movementBatchResponse.getResponse())) { + + List authRules = mdrCacheRuleService.getFaBrsForBrId("FA-L00-00-9999"); + RuleFromMDR authRule = authRules.get(0); + boolean rule9999IsActivated = appliChecker.isApplicable("FA-L00-00-9999", authRule.getContext(), request.getFluxDataFlow(), new DateTime(request.getDate()), mdrCacheRuleService); + if (movementBatchResponse != null && SimpleResponse.OK.equals(movementBatchResponse.getPermitted()) || !rule9999IsActivated) { + if (SimpleResponse.OK.equals(movementBatchResponse.getResponse()) || !rule9999IsActivated) { status = ExchangeLogStatusTypeType.fromValue(fluxMessageHelper.calculateMessageValidationStatus(validationResult).value()); } else { status = ExchangeLogStatusTypeType.FAILED;