public void AddParameterDefinitions(rws.ReportParameter[] wsReportParameters, CrcReportDefinition repDef, CrcExtraConfiguration extraConfig, CrcReportConfig reportConfig)
        {
            List<string> showByDefault = new List<string>();
            if (reportConfig != null)
                showByDefault = reportConfig.GetParamsToShowByDefault();
            List<string> defaultEmptyEquivalents = new List<string>();
            if (extraConfig != null && extraConfig.DefaultEmptyEquivalentValues != null)
                defaultEmptyEquivalents = extraConfig.DefaultEmptyEquivalentValues;

            foreach (var paramLoop in wsReportParameters)
            {
                CrcReportConfig.CrcParamConfig paramConfig = null;
                // get extra config for parameter, if there is any
                if (reportConfig != null)
                    paramConfig = reportConfig.CrcParamConfigs.FirstOrDefault(p => p.ParamName == paramLoop.Name);

                var crcParam = new CrcParameterDefinition();
                crcParam.Name = paramLoop.Name;
                crcParam.id = "param_" + paramLoop.Name.Replace(" ", "_");
                crcParam.AllowNull = paramLoop.Nullable;
                crcParam.AllowBlank = paramLoop.AllowBlank;

                if (string.IsNullOrEmpty(paramLoop.Prompt))
                {
                    // if Prompt is null or empty, it means Parameter is 'Hidden' in SSRS
                    crcParam.Hidden = true;
                    crcParam.DisplayName = paramLoop.Name;
                }
                else
                {
                    crcParam.DisplayName = paramLoop.Prompt;
                }
                if (string.IsNullOrEmpty(crcParam.DisplayName))
                    crcParam.DisplayName = crcParam.Name;
                // if PromptUser is false then Parameter is 'Internal' in SSRS
                if (!paramLoop.PromptUser)
                    crcParam.Hidden = true;
                if (paramLoop.Type == rws.ParameterTypeEnum.DateTime)
                    crcParam.ParameterType = CrcParameterType.Date;
                else if ((paramLoop.ValidValues != null && paramLoop.ValidValues.Count() > 0)
                    || paramLoop.ValidValuesQueryBased)
                {
                    if (paramLoop.MultiValue)
                        crcParam.ParameterType = CrcParameterType.MultiSelect;
                    else
                        crcParam.ParameterType = CrcParameterType.Select;
                }
                else if (paramLoop.Type == rws.ParameterTypeEnum.Boolean)
                    crcParam.ParameterType = CrcParameterType.Boolean;
                else
                    crcParam.ParameterType = CrcParameterType.Text;

                if (paramLoop.ValidValues != null)
                {
                    foreach (var valLoop in paramLoop.ValidValues)
                    {
                        crcParam.ValidValues.Add(new CrcValidValue() { Value = valLoop.Value, Label = valLoop.Label });
                    }
                    if (crcParam.ValidValues.Count() > 10)
                        crcParam.AllowListSearch = true;
                }

                // check config for dependencies
                if (paramConfig != null && paramConfig.DependantParams != null && paramConfig.DependantParams.Count() > 0)
                {
                    logger.DebugFormat("Param {0} has extraconfig dependancies: {1}",
                        paramLoop.Name, string.Join(", ", paramConfig.DependantParams.ToArray()));
                    foreach (string dpname in paramConfig.DependantParams)
                        crcParam.DependantParameterNames.Add(dpname);
                }

                foreach (string sloop in defaultEmptyEquivalents)
                {
                    AddEmptyEquivalent(crcParam, sloop);
                }

                // check for specific empty equivalents for this parameter
                if (paramConfig != null && paramConfig.EmptyEquivalentValues != null)
                {
                    foreach (string sloop in paramConfig.EmptyEquivalentValues)
                    {
                        AddEmptyEquivalent(crcParam, sloop);
                    }
                }

                if (showByDefault.Contains(crcParam.Name))
                    crcParam.AlwaysShow = true;

                repDef.ParameterDefinitions.Add(crcParam);
            }
        }
        public CrcReportDefinition Create(string reportPath, rws.CatalogItem reportCatItem, rws.ReportParameter[] wsReportParameters, CrcExtraConfiguration extraConfig)
        {
            var repDef = new CrcReportDefinition();
            repDef.ReportPath = reportPath;
            if (reportCatItem != null)
            {
                repDef.DisplayName = reportCatItem.Name;
                repDef.Description = reportCatItem.Description;
            }
            if (string.IsNullOrEmpty(repDef.DisplayName))
            {
                repDef.DisplayName = CrcReportDefinition.ReportNameFromPath(repDef.ReportPath);
            }

            CrcReportConfig repConfig = null;
            if (extraConfig != null)
                repConfig = extraConfig.GetReportConfig(repDef.ReportPath);

            if (repConfig != null)
                repDef.ReportHint = repConfig.ReportHint;

            AddParameterDefinitions(wsReportParameters, repDef, extraConfig, repConfig);

            bool readSsrsDependantParams = false;
            if (extraConfig == null || !extraConfig.IgnoreSsrsParameterDependencies)
                readSsrsDependantParams = true;
            if (repConfig != null && repConfig.DependantParamsSpecified)
                readSsrsDependantParams = false;
            if (readSsrsDependantParams)
                AddSsrsDependentParams(wsReportParameters, repDef);

            CrossReferenceDependantParameters(repDef);
            ApplyParameterDefaults(wsReportParameters, repDef);
            CheckRequiredFromUser(repDef);

            return repDef;
        }
 public CrcReportDefinition Create(string reportPath, rws.ReportParameter[] wsReportParameters)
 {
     return Create(reportPath, null, wsReportParameters, null);
 }
 public CrcReportDefinition Create(string reportPath, rws.ReportParameter[] wsReportParameters, CrcExtraConfiguration extraConfig)
 {
     return Create(reportPath, null, wsReportParameters, extraConfig);
 }
        public void ApplyParameterDefaults(rws.ReportParameter[] wsReportParameters, CrcReportDefinition repDef)
        {
            // first build up a choicecollection from the defaults
            var choiceCol = new CrcParameterChoiceCollection();
            foreach (var paramLoop in wsReportParameters)
            {
                if (paramLoop.DefaultValues != null)
                {
                    var crcChoice = new CrcParameterChoice(paramLoop.Name);
                    foreach (string valString in paramLoop.DefaultValues)
                        crcChoice.Values.Add(valString);

                    choiceCol.ParameterChoiceList.Add(crcChoice);
                }
            }
            // now apply it to the repdef
            var mapper = new CrcParameterChoiceMapper();
            var mapResult = mapper.MapParameterChoices(repDef, choiceCol);
            if (!mapResult.MappingValid)
                throw new ApplicationException(string.Format("Could not map report defaults for report {0}. Problems: {1}",
                    repDef.DisplayName, string.Join(", ", mapResult.Complaints.ToArray())));
        }