public override IList <IReportParameterValue> GetReportParameterValues(ResolveParameterValue resolver)
        {
            List <Type>   argumentTypes = new List <Type>();
            List <object> arguments     = new List <object>();

            foreach (MethodArgumentEntry argument in _methodArguments)
            {
                // also gets moved into get
                Type targetType = argument.type;

                object value = null;

                argumentTypes.Add(targetType);

                switch (argument.source)
                {
                case MethodArgumentSource.Callback:
                    value = resolver(argument.name);
                    break;

                case MethodArgumentSource.Constant:
                    value = argument.value;
                    break;
                }

                arguments.Add(ConversionHelper.Convert(value, targetType));
            }

            object     classInstance = _type.GetConstructor(Type.EmptyTypes).Invoke(new object[0]);
            MethodInfo methodInfo    = _type.GetMethod(
                _methodName,
                BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.Instance,
                null,
                argumentTypes.ToArray(),
                new ParameterModifier[0]);

            object result = methodInfo.Invoke(classInstance, arguments.ToArray());

            object[] items = null;

            if (result.GetType().IsArray)
            {
                items = (object[])result;
            }
            else
            {
                foreach (Type t in result.GetType().GetInterfaces())
                {
                    if (t.Equals(typeof(System.Collections.ICollection)))
                    {
                        System.Collections.ICollection c = (System.Collections.ICollection)result;
                        items = new object[c.Count];
                        c.CopyTo(items, 0);
                    }
                    if (t.Equals(typeof(ICollection <object>)))
                    {
                        ICollection <object> c = (ICollection <object>)result;
                        items = new object[c.Count];
                        c.CopyTo(items, 0);
                    }
                }

                if (items == null)
                {
                    items = new object[] { result };
                }
            }

            foreach (object item in items)
            {
                ReportParameterValue reportParameterValue = new ReportParameterValue();
                reportParameterValue.Label = GetPropertyValue(item, _parameterLabelValuePair["Label"]).ToString();
                reportParameterValue.Value = GetPropertyValue(item, _parameterLabelValuePair["Value"]).ToString();
                reportParameterValues.Add(reportParameterValue);
            }
            return(reportParameterValues);
        }
示例#2
0
        private static IList <IReportParameter> GetReportParameters(Serialization.Report xmlReport)
        {
            IList <IReportParameter> reportParameters = new List <IReportParameter>();

            if (xmlReport.Parameters != null && xmlReport.Parameters.Length > 0)
            {
                foreach (Serialization.Parameter xmlParameter in xmlReport.Parameters)
                {
                    ReportParameter reportParameter = new ReportParameter();
                    reportParameter.AllowBlank = xmlParameter.AllowBlank;
                    reportParameter.IsNullable = xmlParameter.AllowNull;
                    reportParameter.Label      = xmlParameter.Label;
                    reportParameter.Name       = xmlParameter.Name;
                    reportParameter.DbType     = ToDbType((ReportParameterDataType)Enum.Parse(typeof(ReportParameterDataType), xmlParameter.ParameterDataType.ToString()));
                    reportParameter.ReportParameterInputType = (ReportParameterInputType)Enum.Parse(typeof(ReportParameterInputType), xmlParameter.ParameterInputType.ToString());

                    AbstractReportParameterValues reportParameterValues = new ReportParameterValuesConstant();

                    if (xmlParameter.ValidValues != null)
                    {
                        if (xmlParameter.ValidValues.Item is Serialization.ParameterRange)
                        {
                            Serialization.ParameterRange xmlParameterRange = (Serialization.ParameterRange)xmlParameter.ValidValues.Item;

                            if (xmlParameterRange.Item is Serialization.DateRange)
                            {
                                Serialization.DateRange xmlDateRange = xmlParameterRange.Item;

                                DateRange dateRange = new DateRange();
                                dateRange.InitialUnit     = (TimeUnit)Enum.Parse(typeof(TimeUnit), xmlDateRange.InitialUnit.ToString());
                                dateRange.InitialDistance = Int32.Parse(xmlDateRange.InitialDistance, CultureInfo.InvariantCulture);
                                dateRange.DistanceUnit    = (TimeUnit)Enum.Parse(typeof(TimeUnit), xmlDateRange.DistanceUnit.ToString());
                                dateRange.Distance        = Int32.Parse(xmlDateRange.Distance, CultureInfo.InvariantCulture);
                                dateRange.NumberOfItems   = Int32.Parse(xmlDateRange.NumberOfItems, CultureInfo.InvariantCulture);
                                dateRange.Direction       = (TimeDirection)Enum.Parse(typeof(TimeDirection), xmlDateRange.Direction.ToString());

                                Serialization.DateTimeFormatInfo xmlDtfi = xmlDateRange.DateTimeFormatInfo;

                                DateTimeFormatInfo dtfi = new DateTimeFormatInfo();

                                if (!string.IsNullOrEmpty(xmlDtfi.FullDateTimePattern))
                                {
                                    dtfi.FullDateTimePattern = xmlDtfi.FullDateTimePattern;
                                }

                                if (!string.IsNullOrEmpty(xmlDtfi.LongDatePattern))
                                {
                                    dtfi.LongDatePattern = xmlDtfi.LongDatePattern;
                                }

                                if (!string.IsNullOrEmpty(xmlDtfi.LongTimePattern))
                                {
                                    dtfi.LongTimePattern = xmlDtfi.LongTimePattern;
                                }

                                if (!string.IsNullOrEmpty(xmlDtfi.MonthDayPattern))
                                {
                                    dtfi.MonthDayPattern = xmlDtfi.MonthDayPattern;
                                }

                                if (!string.IsNullOrEmpty(xmlDtfi.ShortDatePattern))
                                {
                                    dtfi.ShortDatePattern = xmlDtfi.ShortDatePattern;
                                }

                                if (!string.IsNullOrEmpty(xmlDtfi.ShortTimePattern))
                                {
                                    dtfi.ShortTimePattern = xmlDtfi.ShortTimePattern;
                                }

                                if (!string.IsNullOrEmpty(xmlDtfi.YearMonthPattern))
                                {
                                    dtfi.YearMonthPattern = xmlDtfi.YearMonthPattern;
                                }

                                int index = 0, selectedIndex = Int32.Parse(xmlDateRange.SelectedIndex, CultureInfo.InvariantCulture);

                                foreach (DateTime value in dateRange.Items())
                                {
                                    ReportParameterValue reportParameterValue = new ReportParameterValue();
                                    reportParameterValue.Label    = value.ToString(xmlDateRange.LabelDateTimeFormatSpecifier.ToString(), dtfi);
                                    reportParameterValue.Value    = value.ToString(xmlDateRange.ValueDateTimeFormatSpecifier.ToString(), dtfi);
                                    reportParameterValue.Selected = (index++ == selectedIndex);
                                    reportParameterValues.AddReportParameterValue(reportParameterValue);
                                }
                            }
                            else
                            {
                                // ADD NEW RANGE ELEMENT CODE HERE
                            }
                        }
                        else if (xmlParameter.ValidValues.Item is Serialization.DomainModel)
                        {
                            Serialization.DomainModel xmlDomainModel = (Serialization.DomainModel)xmlParameter.ValidValues.Item;

                            IDictionary <string, string> parameterLabelValuePair = new Dictionary <string, string>();
                            parameterLabelValuePair.Add("Label", xmlDomainModel.Label.Name);
                            parameterLabelValuePair.Add("Value", xmlDomainModel.Value.Name);

                            reportParameterValues = new ReportParameterValuesDynamic(Type.GetType(xmlDomainModel.DomainModelName), xmlDomainModel.InvokeMethod.MethodName,
                                                                                     parameterLabelValuePair);

                            foreach (Serialization.MethodArgument argument in xmlDomainModel.InvokeMethod.Arguments)
                            {
                                ((ReportParameterValuesDynamic)reportParameterValues).AddMethodArgumentEntry(argument.Name, Type.GetType(argument.Type), argument.Value, argument.Source.ToString());
                            }

                            IList <IReportParameterValue> staticParameterValues = new List <IReportParameterValue>();

                            if (xmlDomainModel.CustomValues != null)
                            {
                                foreach (Serialization.ParameterValue parameterValue in xmlDomainModel.CustomValues.Insert.ParameterValue)
                                {
                                    ReportParameterValue reportParameterValue = new ReportParameterValue();
                                    reportParameterValue.Label    = parameterValue.Label;
                                    reportParameterValue.Value    = parameterValue.Value;
                                    reportParameterValue.Selected = parameterValue.Selected;

                                    staticParameterValues.Add(reportParameterValue);
                                }
                            }

                            bool itemSelected = false;

                            // this logic is build on the assumption you can only preselect custom fields - is this a safe assumption?
                            if (xmlDomainModel.Selected != null)
                            {
                                if (xmlDomainModel.Selected.Index != null)
                                {
                                    ((ReportParameterValue)staticParameterValues[Int32.Parse(xmlDomainModel.Selected.Index, CultureInfo.InvariantCulture)]).Selected = true;
                                    itemSelected = true;
                                }
                                if (xmlDomainModel.Selected.Value != null)
                                {
                                    foreach (ReportParameterValue x in staticParameterValues)
                                    {
                                        if (x.Value.Equals(xmlDomainModel.Selected.Value))
                                        {
                                            x.Selected   = true;
                                            itemSelected = true;
                                            break;
                                        }
                                    }
                                }
                            }

                            if (!itemSelected)
                            {
                                if (staticParameterValues.Count > 0)
                                {
                                    ((ReportParameterValue)staticParameterValues[0]).Selected = true;
                                }
                            }

                            reportParameterValues.AddReportParameterValues(staticParameterValues);
                        }
                        else // ReportDefinitionLibrary.Xml.ParameterValues
                        {
                            Serialization.ParameterValue[] xmlParameterValues = (Serialization.ParameterValue[])xmlParameter.ValidValues.Item;

                            foreach (Serialization.ParameterValue parameterValue in xmlParameterValues)
                            {
                                ReportParameterValue reportParameterValue = new ReportParameterValue();
                                reportParameterValue.Label    = parameterValue.Label;
                                reportParameterValue.Value    = parameterValue.Value;
                                reportParameterValue.Selected = parameterValue.Selected;

                                reportParameterValues.AddReportParameterValue(reportParameterValue);
                            }
                        }
                    }

                    reportParameter.ReportParameterValues = reportParameterValues;

                    reportParameters.Add(reportParameter);
                }
            }
            return(reportParameters);
        }