internal static HybridFeatureFlags HybridFeaturePropertyValueToHybridFeatureFlags(MultiValuedProperty <HybridFeature> hybridFeatures)
        {
            HybridFeatureFlags hybridFeatureFlags = HybridFeatureFlags.None;

            if (hybridFeatures != null)
            {
                foreach (HybridFeature hybridFeature in hybridFeatures)
                {
                    if (hybridFeature == HybridFeature.FreeBusy)
                    {
                        hybridFeatureFlags |= HybridFeatureFlags.FreeBusy;
                    }
                    else if (hybridFeature == HybridFeature.MoveMailbox)
                    {
                        hybridFeatureFlags |= HybridFeatureFlags.MoveMailbox;
                    }
                    else if (hybridFeature == HybridFeature.Mailtips)
                    {
                        hybridFeatureFlags |= HybridFeatureFlags.Mailtips;
                    }
                    else if (hybridFeature == HybridFeature.MessageTracking)
                    {
                        hybridFeatureFlags |= HybridFeatureFlags.MessageTracking;
                    }
                    else if (hybridFeature == HybridFeature.OwaRedirection)
                    {
                        hybridFeatureFlags |= HybridFeatureFlags.OwaRedirection;
                    }
                    else if (hybridFeature == HybridFeature.OnlineArchive)
                    {
                        hybridFeatureFlags |= HybridFeatureFlags.OnlineArchive;
                    }
                    else if (hybridFeature == HybridFeature.SecureMail)
                    {
                        hybridFeatureFlags |= HybridFeatureFlags.SecureMail;
                    }
                    else if (hybridFeature == HybridFeature.CentralizedTransport)
                    {
                        hybridFeatureFlags |= HybridFeatureFlags.CentralizedTransportOnPrem;
                    }
                    else
                    {
                        if (hybridFeature != HybridFeature.Photos)
                        {
                            throw new ArgumentOutOfRangeException("value");
                        }
                        hybridFeatureFlags |= HybridFeatureFlags.Photos;
                    }
                }
            }
            return(hybridFeatureFlags);
        }
        internal static MultiValuedProperty <HybridFeature> HybridFeaturesFlagsToHybridFeaturesPropertyValue(HybridFeatureFlags hybridFeaturesFlags)
        {
            List <HybridFeature> list = new List <HybridFeature>(9);

            if ((hybridFeaturesFlags & HybridFeatureFlags.FreeBusy) == HybridFeatureFlags.FreeBusy)
            {
                list.Add(HybridFeature.FreeBusy);
            }
            if ((hybridFeaturesFlags & HybridFeatureFlags.MoveMailbox) == HybridFeatureFlags.MoveMailbox)
            {
                list.Add(HybridFeature.MoveMailbox);
            }
            if ((hybridFeaturesFlags & HybridFeatureFlags.Mailtips) == HybridFeatureFlags.Mailtips)
            {
                list.Add(HybridFeature.Mailtips);
            }
            if ((hybridFeaturesFlags & HybridFeatureFlags.MessageTracking) == HybridFeatureFlags.MessageTracking)
            {
                list.Add(HybridFeature.MessageTracking);
            }
            if ((hybridFeaturesFlags & HybridFeatureFlags.OwaRedirection) == HybridFeatureFlags.OwaRedirection)
            {
                list.Add(HybridFeature.OwaRedirection);
            }
            if ((hybridFeaturesFlags & HybridFeatureFlags.OnlineArchive) == HybridFeatureFlags.OnlineArchive)
            {
                list.Add(HybridFeature.OnlineArchive);
            }
            if ((hybridFeaturesFlags & HybridFeatureFlags.SecureMail) == HybridFeatureFlags.SecureMail)
            {
                list.Add(HybridFeature.SecureMail);
            }
            if ((hybridFeaturesFlags & HybridFeatureFlags.CentralizedTransportOnPrem) == HybridFeatureFlags.CentralizedTransportOnPrem)
            {
                list.Add(HybridFeature.CentralizedTransport);
            }
            if ((hybridFeaturesFlags & HybridFeatureFlags.Photos) == HybridFeatureFlags.Photos)
            {
                list.Add(HybridFeature.Photos);
            }
            return(new MultiValuedProperty <HybridFeature>(list));
        }
        internal static void FeaturesSetter(object value, IPropertyBag propertyBag)
        {
            HybridFeatureFlags hybridFeatureFlags = HybridConfiguration.HybridFeaturePropertyValueToHybridFeatureFlags((MultiValuedProperty <HybridFeature>)value);

            propertyBag[HybridConfigurationSchema.Flags] = (int)hybridFeatureFlags;
        }
        internal static object FeaturesGetter(IPropertyBag propertyBag)
        {
            HybridFeatureFlags hybridFeaturesFlags = (HybridFeatureFlags)propertyBag[HybridConfigurationSchema.Flags];

            return(HybridConfiguration.HybridFeaturesFlagsToHybridFeaturesPropertyValue(hybridFeaturesFlags));
        }