public IQualityCheckingResult Correct(object data, IDataQualityCheckingRule rule)
        {
            var checkResult = Check(data, rule);

            var chemistryCheckingResult = new ChemistryCheckingResult();
            chemistryCheckingResult.AddResult(checkResult);

            if (checkResult.NeedCorrection)
            {
                var castedData = (IEnumerable<Core.Action>)data;
                var castedRule = (ChemistryValueCheckingRule)rule;

                foreach (ChemistryValueCheckingRuleItem ruleItem in castedRule.Items)
                {
                    // Assume only one action is present for each matching rule
                    var matchingAction = castedData.Where(x => x.ActionID.Equals(ruleItem.ActionId)).FirstOrDefault();

                    var latestVersionData = _dataVersioningHelper.GetLatestVersionActionData(matchingAction);

                    var qcResult = GenerateCorrectChemistryDataNewVersion(latestVersionData, ruleItem);

                    chemistryCheckingResult.AddResult(qcResult);
                }
            }
            else if (checkResult.Level == QualityCheckingResultLevel.Info)
            {
                return new QualityCheckingResult("Sample data meets quality checking rule. No correction is needed.", false, QualityCheckingResultLevel.Info);
            }
            else
            {
                return new QualityCheckingResult("Sample data/Data checking rule is not valid. No correction could be applied.", false, QualityCheckingResultLevel.Error);
            }

            return chemistryCheckingResult;
        }
        public IQualityCheckingResult Check(object data, IDataQualityCheckingRule rule)
        {
            var checkingResult = new ChemistryCheckingResult();

            if (!IsDataSupported(data))
            {
                return new QualityCheckingResult("Data is not supported by the Quality Checking Tool.", false, QualityCheckingResultLevel.Error);
            }
            else if (!IsDataQualityCheckingRuleSupported(rule))
            {
                return new QualityCheckingResult("Data Quality Checking Rule is not supported by the Quality Checking Tool.", false, QualityCheckingResultLevel.Error);
            }
            else
            {
                var castedData = (IEnumerable<Core.Action>)data;
                var castedRule = (ChemistryValueCheckingRule)rule;

                foreach (ChemistryValueCheckingRuleItem ruleItem in castedRule.Items)
                {
                    // Assume that only one action is present for each matching rule
                    var matchingAction = castedData.Where(x => x.ActionID.Equals(ruleItem.ActionId)).FirstOrDefault();

                    var latestVersionData = _dataVersioningHelper.GetLatestVersionActionData(matchingAction);

                    var qcResult = DoesValueMeetRuleItem(latestVersionData, ruleItem);

                    checkingResult.AddResult(qcResult);
                }
            }

            return checkingResult;
        }
        public IQualityCheckingResult Correct(object data, IDataQualityCheckingRule dataQualityCheckingRule)
        {
            var checkResult = this.Check(data, dataQualityCheckingRule);

            if (checkResult.NeedCorrection)
            {
                var castedData = (Hatfield.EnviroData.Core.Action)data;
                var castedRule = (StringCompareCheckingRule)dataQualityCheckingRule;

                var latestVersionData = _dataVersioningHelper.GetLatestVersionActionData(castedData);
                return GenerateCorrectSampleMatrixTypeDataNewVersion(latestVersionData, castedRule);
            }
            else if(checkResult.Level == QualityCheckingResultLevel.Info)
            {
                return new QualityCheckingResult("Sample data meets quality checking rule. No correction is needed.", false, QualityCheckingResultLevel.Info);
            }
            else
            {
                return new QualityCheckingResult("Sample data/Data checking rule is not valid. No correction could be applied.", false, QualityCheckingResultLevel.Error);
            }
        }
        public IQualityCheckingResult Check(object data, IDataQualityCheckingRule dataQualityCheckingRule)
        {
            if (!IsDataSupported(data))
            {
                return new QualityCheckingResult("Data is not supported by the Quality Checking Tool.", 
                                                 false, 
                                                 QualityCheckingResultLevel.Error);
            }
            else if (!IsDataQualityCheckingRuleSupported(dataQualityCheckingRule))
            {
                return new QualityCheckingResult("Data Quality Checking Rule is not supported by the Quality Checking Tool.", 
                                                 false, 
                                                 QualityCheckingResultLevel.Error);
            }
            else
            {
                var castedData = (Hatfield.EnviroData.Core.Action)data;
                var castedRule = (StringCompareCheckingRule)dataQualityCheckingRule;

                var latestVersionData = _dataVersioningHelper.GetLatestVersionActionData(castedData);
                return IsSampleMatrixTypeDataMeetQualityCheckingRule(latestVersionData, castedRule);
            }
        }
 public bool IsDataQualityCheckingRuleSupported(IDataQualityCheckingRule rule)
 {
     return rule is ChemistryValueCheckingRule;
 }
 public bool IsDataQualityCheckingRuleSupported(IDataQualityCheckingRule dataQualityCheckingRule)
 {
     var isSupported = dataQualityCheckingRule is StringCompareCheckingRule;
     return isSupported;
 }