Example #1
0
        public ErrorCode ReadFrom(Uri requestUri, IEnumerable <KeyValuePair <string, string> > queryNameValuePairs)
        {
            foreach (var item in queryNameValuePairs)
            {
                switch (item.Key)
                {
                case "s":
                {
                    var s = item.Value;
                    if (s.StartsWith("//"))
                    {
                        s = requestUri.Scheme + ":" + s;
                    }
                    if (!Uri.TryCreate(s, UriKind.Absolute, out Source))
                    {
                        return(ErrorCode.SourceUriFormatError);
                    }
                }
                break;

                case "q":
                    int quality;
                    if (!TryConvert(item.Value, out quality))
                    {
                        return(ErrorCode.QualityParseError);
                    }
                    if (!(0 <= quality && quality <= 100))
                    {
                        return(ErrorCode.QualityOutOfRange);
                    }
                    Quality = quality;
                    break;

                case "w":
                    int pixelWidth;
                    if (!TryConvert(item.Value, out pixelWidth))
                    {
                        return(ErrorCode.PixelWidthParseError);
                    }
                    if (pixelWidth < 0)
                    {
                        return(ErrorCode.PixelWidthOutOfRange);
                    }
                    PixelWidth = pixelWidth;
                    break;

                case "h":
                    int pixelHeight;
                    if (!TryConvert(item.Value, out pixelHeight))
                    {
                        return(ErrorCode.PixelHeightParseError);
                    }
                    if (pixelHeight < 0)
                    {
                        return(ErrorCode.PixelHeightOutOfRange);
                    }
                    PixelHeight = pixelHeight;
                    break;

                case "t":
                    ImageType type;
                    if (!Enum.TryParse(item.Value, true, out type))
                    {
                        return(ErrorCode.ImageTypeParseError);
                    }
                    if (type == 0)
                    {
                        return(ErrorCode.ImageTypeOutOfRange);
                    }
                    Type = type;
                    break;

                case "c":
                    if (item.Value == "smart")
                    {
                        CropSmart = true;
                        break;
                    }
                    // the crop rectange is in percentages,
                    // based on the source image dimension
                    // we use this to get the actual crop
                    Int32Rect crop;
                    try
                    {
                        crop = Int32Rect.Parse(item.Value);
                    }
                    catch (Exception)
                    {
                        return(ErrorCode.CropRectParseError);
                    }
                    if (!((0 <= (crop.X + crop.Width)) & (crop.X + crop.Width) <= 100))
                    {
                        return(ErrorCode.CropRectOutOfRange);
                    }
                    if (!((0 <= (crop.Y + crop.Height)) & (crop.Y + crop.Height) <= 100))
                    {
                        return(ErrorCode.CropRectOutOfRange);
                    }
                    Crop = crop;
                    break;

                case "f":
                    FittingType fit;
                    if (!Enum.TryParse(item.Value, true, out fit))
                    {
                        return(ErrorCode.FittingTypeParseError);
                    }
                    Fit = fit;
                    break;

                case "bg-color":
                    try
                    {
                        if (HexPattern.IsMatch(item.Value))
                        {
                            var s = item.Value;
                            if (s.Length == 3)
                            {
                                // shorthand #fc0 -> #ffcc00
                                s = s.Substring(0, 1) + s.Substring(0, 1)
                                    + s.Substring(1, 1) + s.Substring(1, 1)
                                    + s.Substring(2, 1) + s.Substring(2, 1)
                                ;
                            }
                            BackgroundColor = (Color)ColorConverter.ConvertFromString("#" + item.Value);
                        }
                        else
                        {
                            BackgroundColor = (Color)ColorConverter.ConvertFromString(item.Value);
                        }
                    }
                    catch (Exception)
                    {
                        return(ErrorCode.BackgroundColorParseError);
                    }
                    break;

                case "debug":
                {
                    IsDebug = item.Value == "1";
                    break;
                }
                }
            }

            if (Source == null)
            {
                return(ErrorCode.SourceIsRequired);
            }

            return(ErrorCode.None);
        }
Example #2
0
        public override void UpdateNodes()
        {
            Fitting        fittingAlias        = null;
            FittingType    typeAlias           = null;
            FittingVMNode  resultAlias         = null;
            Diameter       diameterAlias       = null;
            Pressure       pressureAlias       = null;
            ConnectionType connectionTypeAlias = null;
            BodyMaterial   bodyMaterialAlias   = null;

            PriceItem pricePriceItemAlias = null;
            PriceItem datePriceItemAlias  = null;
            Price     pricePriceAlias     = null;
            Price     datePriceAlias      = null;
            Provider  providerAlias       = null;

            var dateSubQuery = QueryOver.Of <PriceItem> (() => datePriceItemAlias)
                               .JoinAlias(c => c.Price, () => datePriceAlias)
                               .Where(() => datePriceItemAlias.Fitting.Id == fittingAlias.Id)
                               .Where(() => datePriceAlias.Provider.Id == pricePriceAlias.Provider.Id)
                               .Select(Projections.SqlFunction(
                                           new SQLFunctionTemplate(NHibernateUtil.String, "SUBSTRING_INDEX(?1, ?2, ?3)"),
                                           NHibernateUtil.Int32,
                                           Projections.SqlFunction(
                                               new SQLFunctionTemplate(NHibernateUtil.String, "GROUP_CONCAT( ?1 ORDER BY ?2)"),
                                               NHibernateUtil.String,
                                               Projections.Property(() => datePriceAlias.Id),
                                               Projections.Property(() => datePriceAlias.Date)),
                                           Projections.Constant(","),
                                           Projections.Constant(-1)
                                           ));

            var priceSubQuery = QueryOver.Of <PriceItem> (() => pricePriceItemAlias)
                                .JoinAlias(c => c.Price, () => pricePriceAlias)
                                .JoinAlias(() => pricePriceAlias.Provider, () => providerAlias)
                                .Where(() => pricePriceItemAlias.Fitting.Id == fittingAlias.Id)
                                .WithSubquery.WhereProperty(() => pricePriceAlias.Id).In(dateSubQuery)
                                .Select(Projections.SqlFunction(
                                            new SQLFunctionTemplate(NHibernateUtil.String, "GROUP_CONCAT( ?1 SEPARATOR ?2)"),
                                            NHibernateUtil.String,
                                            Projections.SqlFunction("CONCAT", NHibernateUtil.String,
                                                                    Projections.Property(() => providerAlias.Name),
                                                                    Projections.Constant(" - "),
                                                                    Projections.Property(() => pricePriceItemAlias.Cost),
                                                                    Projections.Constant(" "),
                                                                    Projections.Property(() => pricePriceItemAlias.Currency),
                                                                    Projections.Constant(" ("),
                                                                    Projections.SqlFunction(
                                                                        new SQLFunctionTemplate(NHibernateUtil.String, "DATE_FORMAT( ?1, ?2)"),
                                                                        NHibernateUtil.String,
                                                                        Projections.Property(() => pricePriceAlias.Date),
                                                                        Projections.Constant("%d.%m.%Y")
                                                                        ),
                                                                    Projections.Constant(")")
                                                                    ),
                                            Projections.Constant("\n")))
                                .Take(1);

            var fittingQuery = UoW.Session.QueryOver <Fitting> (() => fittingAlias)
                               .JoinAlias(c => c.Name, () => typeAlias)
                               .JoinAlias(c => c.Diameter, () => diameterAlias)
                               .JoinAlias(c => c.Pressure, () => pressureAlias)
                               .JoinAlias(c => c.ConnectionType, () => connectionTypeAlias)
                               .JoinAlias(c => c.BodyMaterial, () => bodyMaterialAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin);

            if (Filter.RestrictFittingType != null)
            {
                fittingQuery.Where(() => fittingAlias.Name.Id == Filter.RestrictFittingType.Id);
            }

            if (Filter.RestrictBodyMaterial != null)
            {
                fittingQuery.Where(() => fittingAlias.BodyMaterial.Id == Filter.RestrictBodyMaterial.Id);
            }

            if (Filter.RestrictConnectionType != null)
            {
                fittingQuery.Where(() => fittingAlias.ConnectionType.Id == Filter.RestrictConnectionType.Id);
            }

            if (Filter.RestrictDiameter != null)
            {
                fittingQuery.Where(() => fittingAlias.Diameter.Id == Filter.RestrictDiameter.Id);
            }

            if (Filter.RestrictPressure != null)
            {
                fittingQuery.Where(() => fittingAlias.Pressure.Id == Filter.RestrictPressure.Id);
            }

            if (!String.IsNullOrEmpty(Filter.RestrictModel))
            {
                fittingQuery.Where(() => fittingAlias.Code == Filter.RestrictModel);
            }

            var fittinglist = fittingQuery.SelectList(list => list
                                                      .Select(() => fittingAlias.Id).WithAlias(() => resultAlias.Id)
                                                      .Select(() => typeAlias.NameRus).WithAlias(() => resultAlias.Name)

                                                      .Select(() => diameterAlias.Inch).WithAlias(() => resultAlias.DiameterInch)
                                                      .Select(() => diameterAlias.DN).WithAlias(() => resultAlias.DiameterMm)
                                                      .Select(() => fittingAlias.DiameterUnits).WithAlias(() => resultAlias.DiameterUnits)

                                                      .Select(() => pressureAlias.Pn).WithAlias(() => resultAlias.PressurePn)
                                                      .Select(() => pressureAlias.Pclass).WithAlias(() => resultAlias.PressurePclass)
                                                      .Select(() => fittingAlias.PressureUnits).WithAlias(() => resultAlias.PressureUnits)

                                                      .Select(() => connectionTypeAlias.NameRus).WithAlias(() => resultAlias.ConnectionType)
                                                      .Select(() => bodyMaterialAlias.NameRus).WithAlias(() => resultAlias.BodyMaterial)
                                                      .Select(() => fittingAlias.Code).WithAlias(() => resultAlias.Code)
                                                      .Select(() => fittingAlias.Note).WithAlias(() => resultAlias.Note)

                                                      .SelectSubQuery(priceSubQuery).WithAlias(() => resultAlias.ProvidersPrice)
                                                      )
                              .TransformUsing(Transformers.AliasToBean <FittingVMNode>())
                              .List <FittingVMNode>();

            SetItemsSource(fittinglist);
        }