public IPolicySet ConvertPolicySet(AddPolicyLoadConversionMessageDelegate AddConversionMessage) { const decimal currentVersion = 2.1M; PolicyConverterBase converter = null; decimal version = decimal.Parse(GetPolicySetVersion(), CultureInfo.InvariantCulture); if (0 < decimal.Compare(currentVersion, version)) { PolicySetVersionStatus status = LatestVersion.Status; converter = new PolicySetVersionConverter_2_1(m_policySetCache, AddConversionMessage); converter.CreateCopyOfLatestVersion(); SetVersionStatus(LatestVersion, PolicySetVersionStatus.Disabled); converter.Convert(); converter.ConvertCompiledPolicySets(); // Restore status in the latest version SetVersionStatus(LatestVersion, status); } else if (0 == decimal.Compare(currentVersion, version)) { converter = new PolicyConverterBase(m_policySetCache, AddConversionMessage); } else { ErrorMessage errorMessage = new ErrorMessage("POLICY_VERSION_NOT_SUPPORTED", "Workshare.Policy.Properties.Resources", Assembly.GetExecutingAssembly()); Logger.LogError(errorMessage.LogString); throw new Exceptions.PolicyException(errorMessage.DisplayString); } IPolicySet result = converter.LatestPolicySet; if (result.PolicyType != m_policySetCache.LatestPolicyType) { string error = string.Format(CultureInfo.CurrentCulture, Properties.Resources.POLICY_TYPES_DISAGREE, m_policySetCache.LatestPolicyType, result.PolicyType); Logger.LogError(error); throw new Exceptions.PolicyException(error); } return result; }