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); }
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); }