private static IReportProcessingLocation GetReportProcessingLocation(Serialization.Report xmlReport)
        {
            IReportProcessingLocation location;

            if (xmlReport.ReportProcessingLocation.Use.Equals(Serialization.ActiveReportProcessingLocation.LocalReport))
            {
                string directory = ConfigurationManager.AppSettings["VB.Reports.App.ReportDefinitionLibrary.Xml.XmlReportDefinitionFactory.Report.Directory"];

                Serialization.LocalReport localReport = xmlReport.ReportProcessingLocation.LocalReport;

                LocalReportProcessingLocation local = new LocalReportProcessingLocation();
                local.File           = directory + Path.DirectorySeparatorChar + localReport.File;
                local.DataSourceName = localReport.DataSourceName;

                location = local;
            }
            else
            {
                string serverUrl = ConfigurationManager.AppSettings["VB.Reports.App.ReportDefinitionLibrary.Xml.XmlReportDefinitionFactory.Report.ServerUrl"];

                Serialization.ServerReport serverReport = xmlReport.ReportProcessingLocation.ServerReport;

                RemoteReportProcessingLocation remote = new RemoteReportProcessingLocation();
                remote.Path      = serverReport.Path;
                remote.ServerUrl = new Uri(serverUrl);

                location = remote;
            }
            return(location);
        }
        private IReport LoadReport(Serialization.Report xmlReport)
        {
            Report report = new Report(this);

            report.Id          = xmlReport.Id;
            report.Name        = xmlReport.Name;
            report.Description = xmlReport.Description;

            if (xmlReport.NewUntilSpecified)
            {
                report.IsNew = xmlReport.NewUntil > DateTime.Now;
            }
            else
            {
                report.IsNew = false;
            }

            report.ReportType = (ReportType)Enum.Parse(typeof(ReportType), xmlReport.ReportType.ToString());

            return(report);
        }
        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);
        }