public override bool Evaluate(Vehicle vec, IFFMDynamicResolver ffmResolver, ValidationRuleInternalResults internalResult) { bool flag = false; PdszDatabase database = ClientContext.GetDatabase(vec); if (database == null) { return(false); } PdszDatabase.EcuClique ecuClique = database.GetEcuCliqueById(this.value.ToString(CultureInfo.InvariantCulture)); if (vec == null) { return(false); } if (ecuClique == null) { return(true); } if (!database.EvaluateXepRulesById(ecuClique.Id, vec, ffmResolver, null)) { return(false); } List <PdszDatabase.EcuVar> ecuVariantsByEcuCliquesId = ClientContext.GetDatabase(vec)?.GetEcuVariantsByEcuCliquesId(ecuClique.Id); if (ecuVariantsByEcuCliquesId == null || ecuVariantsByEcuCliquesId.Count == 0) { return(false); } if (vec.VCI != null && vec.VCI.VCIType == VCIDeviceType.INFOSESSION && (vec.VehicleIdentLevel == IdentificationLevel.BasicFeatures || vec.VehicleIdentLevel == IdentificationLevel.VINBasedFeatures || (vec.VehicleIdentLevel == IdentificationLevel.VINBasedOnlineUpdated && (vec.ECU == null || (vec.ECU != null && vec.ECU.Count == 0))) || vec.VehicleIdentLevel == IdentificationLevel.VINOnly)) { foreach (PdszDatabase.EcuVar ecuVar in ecuVariantsByEcuCliquesId) { flag = database.EvaluateXepRulesById(ecuVar.Id, vec, ffmResolver, null); if (flag && !string.IsNullOrEmpty(ecuVar.GroupId)) { flag = database.EvaluateXepRulesById(ecuVar.GroupId, vec, ffmResolver, null); if (flag) { break; } } } return(flag); } foreach (PdszDatabase.EcuVar ecuVar in ecuVariantsByEcuCliquesId) { if (!(flag = (vec.getECUbyECU_SGBD(ecuVar.Name) != null)) && "EWS3".Equals(ecuVar.Name, StringComparison.OrdinalIgnoreCase) && vec.BNType == BNType.BN2000_PGO) { //Log.Info("EcuCliqueExpression.Evaluate()", "check for EWS3 => EWS3P", Array.Empty<object>()); flag = true; } if (flag) { break; } } return(flag); }
public IEcuObj Build(IPsdzEcu ecuInput) { if (ecuInput == null) { return(null); } EcuObj ecuObj = new EcuObj(); ecuObj.BaseVariant = ecuInput.BaseVariant; ecuObj.EcuVariant = ecuInput.EcuVariant; ecuObj.BnTnName = ecuInput.BnTnName; ecuObj.GatewayDiagAddrAsInt = ((ecuInput.GatewayDiagAddr != null) ? new int?(ecuInput.GatewayDiagAddr.Offset) : null); ecuObj.DiagnosticBus = this.busEnumMapper.GetValue(ecuInput.DiagnosticBus); ecuObj.SerialNumber = ecuInput.SerialNumber; ecuObj.EcuIdentifier = this.Build(ecuInput.PrimaryKey); ecuObj.StandardSvk = this.Build(ecuInput.StandardSvk); ecuObj.BusConnections = ((ecuInput.BusConnections != null) ? ecuInput.BusConnections.Select(new Func <PsdzBus, Bus>(this.busEnumMapper.GetValue)).ToList <Bus>() : null); ecuObj.EcuDetailInfo = ((ecuInput.EcuDetailInfo != null) ? new EcuObjDetailInfo(ecuInput.EcuDetailInfo.ByteValue) : null); ecuObj.EcuStatusInfo = ((ecuInput.EcuStatusInfo != null) ? new EcuObjStatusInfo(ecuInput.EcuStatusInfo.ByteValue, ecuInput.EcuStatusInfo.HasIndividualData) : null); ecuObj.EcuPdxInfo = this.Build(ecuInput.PsdzEcuPdxInfo); PdszDatabase database = ClientContext.GetDatabase(this.vehicle); if (database != null) { string bnTnName = ecuInput.BnTnName; IEcuIdentifier ecuIdentifier = ecuObj.EcuIdentifier; PdszDatabase.EcuVar ecuVar = database.FindEcuVariantFromBntn(bnTnName, (ecuIdentifier != null) ? new int?(ecuIdentifier.DiagAddrAsInt) : null, this.vehicle, this.ffmResolver); if (ecuVar != null && !string.IsNullOrEmpty(ecuVar.Name)) { //ecuObj.XepEcuVariant = xep_ECUVARIANTS; ecuObj.EcuVariant = ecuVar.Name.ToUpper(CultureInfo.InvariantCulture); PdszDatabase.EcuClique ecuClique = database.FindEcuClique(ecuVar); //ecuObj.XepEcuClique = ecuClique; PdszDatabase.EcuGroup ecuGroup = database.FindEcuGroup(ecuVar, this.vehicle, this.ffmResolver); if (ecuGroup != null) { ecuObj.EcuGroup = ecuGroup.Name.ToUpper(CultureInfo.InvariantCulture); } PdszDatabase.EcuReps ecuReps = database.FindEcuRep(ecuClique); if (ecuReps != null) { ecuObj.EcuRep = ecuReps.EcuShortcut; } } } return(ecuObj); }