public bool Process(string properties, string customer, out string errors)
        {
            var result = true;
            errors = "";

            var p = properties.Split('|');
            bool t = false;
            WidgetColor c = WidgetColor.SomeShadeOfGrey;
            DateTime d = new DateTime();
            DataAccess da = new DataAccess();

            if (!properties.StartsWith("<record>"))
            {
                for (int i = 0; i < p.Length; i++)
                {
                    var kv = p[i].Split('=');
                    if (kv.Length != 2)
                    {
                        result = false;
                        if (errors != "")
                        {
                            errors += Environment.NewLine;
                        }
                        errors += "invalid value found in properties";
                        continue;
                    }
                    var key = kv[0];
                    var value = kv[1];

                    switch (key)
                    {
                        case "temporary":
                            if (!bool.TryParse(value, out t))
                            {
                                result = false;
                                if (errors != "")
                                {
                                    errors += Environment.NewLine;
                                }
                                errors += "invalid temporary value";
                            }
                            break;
                        case "color":
                            switch (value)
                            {
                                case "blue":
                                    c = WidgetColor.Blue;
                                    break;
                                case "red":
                                    c = WidgetColor.Red;
                                    break;
                                case "green":
                                    c = WidgetColor.Green;
                                    break;
                                case "someshadeofgrey":
                                    c = WidgetColor.SomeShadeOfGrey;
                                    break;
                                default:
                                    result = false;
                                    if (errors != "")
                                    {
                                        errors += Environment.NewLine;
                                    }
                                    errors += "invalid widget color";
                                    break;
                            }
                            break;
                        case "endDate":
                            if (!DateTime.TryParse(value, out d))
                            {
                                result = false;
                                if (errors != "")
                                {
                                    errors += Environment.NewLine;
                                }
                                errors += "invalid endDate";
                            }
                            break;
                        default:
                            result = false;
                            if (errors != "")
                            {
                                errors += Environment.NewLine;
                            }
                            errors += "invalid endDate";
                            break;
                    }
                }
            }
            else
            {
                var document = new XmlDocument();

                try
                {
                    document.Load(new StringReader(properties));
                }
                catch (Exception e)
                {
                    result = false;
                    if (errors != "")
                    {
                        errors += Environment.NewLine;
                    }
                    errors += "invalid xml";
                }

                foreach (XmlElement node in document.ChildNodes)
                {
                    switch (node.Name)
                    {
                        case "temporary":
                            if (!bool.TryParse(node.Value, out t))
                            {
                                result = false;
                                if (errors != "")
                                {
                                    errors += Environment.NewLine;
                                }
                                errors += "invalid temporary value";
                            }
                            break;
                        case "color":
                            switch (node.Value)
                            {
                                case "blue":
                                    c = WidgetColor.Blue;
                                    break;
                                case "red":
                                    c = WidgetColor.Red;
                                    break;
                                case "green":
                                    c = WidgetColor.Green;
                                    break;
                                case "someshadeofgrey":
                                    c = WidgetColor.SomeShadeOfGrey;
                                    break;
                                default:
                                    result = false;
                                    if (errors != "")
                                    {
                                        errors += Environment.NewLine;
                                    }
                                    errors += "invalid widget color";
                                    break;
                            }
                            break;
                        case "endDate":
                            if (!DateTime.TryParse(node.Value, out d))
                            {
                                result = false;
                                if (errors != "")
                                {
                                    errors += Environment.NewLine;
                                }
                                errors += "invalid endDate";
                            }
                            break;
                        default:
                            result = false;
                            if (errors != "")
                            {
                                errors += Environment.NewLine;
                            }
                            errors += "invalid endDate";
                            break;
                    }
                }
            }

            if (c == WidgetColor.Blue && customer == "AB")
            {
                t = false;
            }

            if (t)
            {
                if (d >= DateTime.Now)
                {
                    try
                    {
                        var message = "";
                        var dbOk = da.Update(customer, c.ToString(), d, out message);
                        if (!dbOk)
                        {
                            result = false;
                            if (errors != "")
                            {
                                errors += Environment.NewLine;
                            }
                            errors += message;
                        }
                    }
                    catch (Exception e)
                    {
                        result = false;
                        if (errors != "")
                        {
                            errors += Environment.NewLine;
                        }
                        errors += e.ToString();
                    }
                }
                else
                {
                    try
                    {
                        var message = "";
                        var dbOk = da.UpdateTemporaryStore(customer, c.ToString(), out message);
                        if (!dbOk)
                        {
                            result = false;
                            if (errors != "")
                            {
                                errors += Environment.NewLine;
                            }
                            errors += message;
                        }
                    }
                    catch (Exception e)
                    {
                        result = false;
                        if (errors != "")
                        {
                            errors += Environment.NewLine;
                        }
                        errors += e.ToString();
                    }
                }
            }
            else
            {
                try
                {
                    var message = "";
                    var dbOk = da.Update(customer, c.ToString(), d, out message);
                    if (!dbOk)
                    {
                        result = false;
                        if (errors != "")
                        {
                            errors += Environment.NewLine;
                        }
                        errors += message;
                    }
                }
                catch (Exception e)
                {
                    result = false;
                    if (errors != "")
                    {
                        errors += Environment.NewLine;
                    }
                    errors += e.ToString();
                }
            }

            return result;
        }     
Beispiel #2
0
        public bool Process(ProcessParams processParams, out string returnedErrors)
        {
            if(processParams.Properties == null)
            {
                throw new ArgumentNullException("properties");
            }
            if(processParams.Customer == null)
            {
                throw new ArgumentNullException("customer");
            }

            var result = true;
            var errors = "";

            Action<string> fail = message =>
            {
                result = false;
                if (errors != "")
                {
                    errors += Environment.NewLine;
                }
                errors += message;
            };

            var splitProperties = processParams.Properties.Split('|');
            bool temporary = false;
            var widgetColor = WidgetColor.SomeShadeOfGrey;
            var endDate = new DateTime();
            var dataAccess = new DataAccess();

            if (!processParams.Properties.StartsWith("<record>"))
            {
                for (int i = 0; i < splitProperties.Length; i++)
                {
                    var kv = splitProperties[i].Split('=');
                    if (kv.Length != 2)
                    {
                        throw new BadCodeException("invalid value found in properties");
                        continue;
                    }
                    var key = kv[0];
                    var value = kv[1];

                    switch (key)
                    {
                        case "temporary":
                            if (!bool.TryParse(value, out temporary))
                            {
                                fail("invalid temporary value");
                            }
                            break;
                        case "color":
                            switch (value)
                            {
                                case "blue":
                                    widgetColor = WidgetColor.Blue;
                                    break;
                                case "red":
                                    widgetColor = WidgetColor.Red;
                                    break;
                                case "green":
                                    widgetColor = WidgetColor.Green;
                                    break;
                                case "someshadeofgrey":
                                    widgetColor = WidgetColor.SomeShadeOfGrey;
                                    break;
                                default:
                                    result = false;
                                    if (errors != "")
                                    {
                                        errors += Environment.NewLine;
                                    }
                                    errors += "invalid widget color";
                                    break;
                            }
                            break;
                        case "endDate":
                            if (!DateTime.TryParse(value, out endDate))
                            {
                                result = false;
                                if (errors != "")
                                {
                                    errors += Environment.NewLine;
                                }
                                errors += "invalid endDate";
                            }
                            break;
                        default:
                            result = false;
                            if (errors != "")
                            {
                                errors += Environment.NewLine;
                            }
                            errors += "invalid endDate";
                            break;
                    }
                }
            }
            else
            {
                var document = new XmlDocument();

                try
                {
                    document.Load(new StringReader(processParams.Properties));
                }
                catch (Exception e)
                {
                    result = false;
                    if (errors != "")
                    {
                        errors += Environment.NewLine;
                    }
                    errors += "invalid xml";
                }

                foreach (XmlElement node in document.ChildNodes)
                {
                    switch (node.Name)
                    {
                        case "temporary":
                            if (!bool.TryParse(node.Value, out temporary))
                            {
                                result = false;
                                if (errors != "")
                                {
                                    errors += Environment.NewLine;
                                }
                                errors += "invalid temporary value";
                            }
                            break;
                        case "color":
                            switch (node.Value)
                            {
                                case "blue":
                                    widgetColor = WidgetColor.Blue;
                                    break;
                                case "red":
                                    widgetColor = WidgetColor.Red;
                                    break;
                                case "green":
                                    widgetColor = WidgetColor.Green;
                                    break;
                                case "someshadeofgrey":
                                    widgetColor = WidgetColor.SomeShadeOfGrey;
                                    break;
                                default:
                                    result = false;
                                    if (errors != "")
                                    {
                                        errors += Environment.NewLine;
                                    }
                                    errors += "invalid widget color";
                                    break;
                            }
                            break;
                        case "endDate":
                            if (!DateTime.TryParse(node.Value, out endDate))
                            {
                                result = false;
                                if (errors != "")
                                {
                                    errors += Environment.NewLine;
                                }
                                errors += "invalid endDate";
                            }
                            break;
                        default:
                            result = false;
                            if (errors != "")
                            {
                                errors += Environment.NewLine;
                            }
                            errors += "invalid endDate";
                            break;
                    }
                }
            }

            if (widgetColor == WidgetColor.Blue && processParams.Customer == "AB")
            {
                temporary = false;
            }

            if (temporary)
            {
                if (endDate >= DateTime.Now)
                {
                    try
                    {
                        var message = "";
                        var dbOk = dataAccess.Update(processParams.Customer, widgetColor.ToString(), endDate, out message);
                        if (!dbOk)
                        {
                            result = false;
                            if (errors != "")
                            {
                                errors += Environment.NewLine;
                            }
                            errors += message;
                        }
                    }
                    catch (Exception e)
                    {
                        result = false;
                        if (errors != "")
                        {
                            errors += Environment.NewLine;
                        }
                        errors += e.ToString();
                    }
                }
                else
                {
                    try
                    {
                        var message = "";
                        var dbOk = dataAccess.UpdateTemporaryStore(processParams.Customer, widgetColor.ToString(), out message);
                        if (!dbOk)
                        {
                            result = false;
                            if (errors != "")
                            {
                                errors += Environment.NewLine;
                            }
                            errors += message;
                        }
                    }
                    catch (Exception e)
                    {
                        result = false;
                        if (errors != "")
                        {
                            errors += Environment.NewLine;
                        }
                        errors += e.ToString();
                    }
                }
            }
            else
            {
                try
                {
                    var message = "";
                    var dbOk = dataAccess.Update(processParams.Customer, widgetColor.ToString(), endDate, out message);
                    if (!dbOk)
                    {
                        result = false;
                        if (errors != "")
                        {
                            errors += Environment.NewLine;
                        }
                        errors += message;
                    }
                }
                catch (Exception e)
                {
                    result = false;
                    if (errors != "")
                    {
                        errors += Environment.NewLine;
                    }
                    errors += e.ToString();
                }
            }

            returnedErrors = errors;
            return result;
        }