File: AuthoringOM\Behaviors\WorkflowTransactionOptions.cs
Project: ndp\cdf\src\WF\Common\System.Workflow.ComponentModel.csproj (System.Workflow.ComponentModel)
namespace System.Workflow.ComponentModel
{
    using System;
    using System.Xml;
    using System.Collections.Generic;
    using System.Text;
    using System.Globalization;
    using System.ComponentModel;
    using System.Transactions;
    using System.Reflection;
    using System.Workflow.ComponentModel;
    using System.Workflow.ComponentModel.Design;
    using System.ComponentModel.Design.Serialization;
    using System.Collections;
    using System.CodeDom;
    using System.Collections.Specialized;
    using System.Workflow.ComponentModel.Compiler;
    using System.Workflow.ComponentModel.Serialization;
 
    [Browsable(true)]
    [DesignerSerializer(typeof(DependencyObjectCodeDomSerializer), typeof(CodeDomSerializer))]
    [Obsolete("The System.Workflow.* types are deprecated.  Instead, please use the new types from System.Activities.*")]
    public sealed class WorkflowTransactionOptions : DependencyObject
    {
        public static readonly DependencyProperty TimeoutDurationProperty = DependencyProperty.Register("TimeoutDuration", typeof(TimeSpan), typeof(WorkflowTransactionOptions), new PropertyMetadata(new TimeSpan(0, 0, 30), DependencyPropertyOptions.Metadata));
        public static readonly DependencyProperty IsolationLevelProperty = DependencyProperty.Register("IsolationLevel", typeof(IsolationLevel), typeof(WorkflowTransactionOptions), new PropertyMetadata(IsolationLevel.Serializable, DependencyPropertyOptions.Metadata));
 
        [SRDescription(SR.TimeoutDescr)]
        [SRCategory(SR.Activity)]
        [MergableProperty(false)]
        [DefaultValue(typeof(TimeSpan), "0:0:30")]
        [TypeConverter(typeof(TimeoutDurationConverter))]
        public TimeSpan TimeoutDuration
        {
            get
            {
                return (TimeSpan)base.GetValue(TimeoutDurationProperty);
            }
            set
            {
                base.SetValue(TimeoutDurationProperty, value);
            }
        }
 
        [SRDescription(SR.IsolationLevelDescr)]
        [SRCategory(SR.Activity)]
        [MergableProperty(false)]
        public IsolationLevel IsolationLevel
        {
            get
            {
                return (IsolationLevel)base.GetValue(IsolationLevelProperty);
            }
            set
            {
                base.SetValue(IsolationLevelProperty, value);
            }
        }
    }
 
    internal sealed class TimeoutDurationConverter : TypeConverter
    {
        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
        {
            if (destinationType == typeof(string))
                return true;
 
            return base.CanConvertTo(context, destinationType);
        }
 
        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
        {
            if (destinationType == typeof(string) && value is TimeSpan)
            {
                TimeSpan timespan = (TimeSpan)value;
                return timespan.ToString();
            }
 
            return base.ConvertTo(context, culture, value, destinationType);
        }
 
        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
        {
            if (sourceType == typeof(string))
                return true;
 
            return base.CanConvertFrom(context, sourceType);
        }
 
        public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
        {
            TimeSpan parsedTimespan = TimeSpan.Zero;
            string timeSpan = value as string;
            if (!String.IsNullOrEmpty(timeSpan))
            {
                //If this fails then an exception is thrown and the property set would fail
                try
                {
                    parsedTimespan = TimeSpan.Parse(timeSpan, CultureInfo.InvariantCulture);
                }
                catch
                {
                }
 
                if (parsedTimespan.Ticks < 0)
                {
                    throw new Exception(string.Format(System.Globalization.CultureInfo.CurrentCulture, SR.GetString(SR.Error_NegativeValue), value.ToString(), "TimeoutDuration"));
                }
            }
 
            return parsedTimespan;
        }
 
        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
        {
            return true;
        }
 
        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
        {
            ArrayList standardValuesCollection = new ArrayList();
            standardValuesCollection.Add(new TimeSpan(0, 0, 0));
            standardValuesCollection.Add(new TimeSpan(0, 0, 15));
            standardValuesCollection.Add(new TimeSpan(0, 1, 0));
            return new StandardValuesCollection(standardValuesCollection);
        }
    }
}