/// <summary> /// For using in "ProjectsHelper.ParseForColumns" /// </summary> /// <param name="comaSeparatedProperties">One line of definition</param> /// <returns>Model for column with "user-format exception in header"</returns> /// <exception cref="ArguementException"/> private static ColumnDefinition StringToColumn(string comaSeparatedProperties, HttpContextBase context) { if (context == null) { throw new ArgumentException(); } ColumnDefinition toReturn = new ColumnDefinition(); string[] properties = Regex.Split(comaSeparatedProperties, @"(?<!\\),"); if (properties.Length != 4) { HttpContextWarker cultureProvider = new HttpContextWarker(context); String culture = cultureProvider.GetCulture(); String message = ResourcesHelper.GetText("BadColumnDefinition", culture); throw new ArgumentException(message); } for (int i = 0; i < 4; i++) { properties[i] = Regex.Match(properties[i], @"\A *(.*?) *\z").Groups[1].Value; } toReturn.Header = properties[0]; toReturn.Formula = properties[1]; toReturn.Type = properties[2]; try { toReturn.Width = Int32.Parse(properties[3]); } catch { HttpContextWarker cultureProvider = new HttpContextWarker(context); String culture = cultureProvider.GetCulture(); String message = ResourcesHelper.GetText("BadWidthDefinition", culture); throw new ArgumentException(message); } return toReturn; }
/// <summary> /// Generates project definitions with actual values of properties defined in "columns" /// </summary> /// <param name="columns">User-defined table view after "ParseForColumns" method</param> /// <returns>Models of required projects</returns> private static ProjectModel[] GetProjectModels(ColumnDefinition[] columns, String filter, String tableDefinition, IPrincipal user) { RequestBuilder dal = GetRequestBuilder(filter, tableDefinition, user); Evaluation[] values = dal.GetValues(); ProjectModel[] projects = SetValuesIntoFormulas(values, columns); return projects; }
public void StringToColumnTest() { string comaSeparatedProperties = @"Header, *[some](formula)*, String, 18"; ColumnDefinition expected = new ColumnDefinition { Header = "Header", Formula = "*[some](formula)*", Type = "String", Width = 18 }; ColumnDefinition actual; try { actual = ProjectsHelper_Accessor.StringToColumn(comaSeparatedProperties, context); } catch (Exception e) { Assert.IsTrue(e is ArgumentException); return; } Assert.Fail(); }
/// <summary> /// Generates projects. To create each project it gives values of this project to each column. /// </summary> /// <param name="valuesForEach">Evaluated SQL functions and variables of projects.</param> /// <param name="columns">Program definition of each required column.</param> /// <returns>Viewable models for projects.</returns> public static ProjectModel[] SetValuesIntoFormulas(Evaluation[] valuesForEach, ColumnDefinition[] columns) { ProjectModel[] projects = new ProjectModel[valuesForEach.Length]; for (int i = 0; i < projects.Length; i++) { ProjectModel project = new ProjectModel(); project.Properties = new String[columns.Length]; for(int j = 0; j < columns.Length; j++) { project.Properties[j] = columns[j].ParseFormula(valuesForEach[i]); } projects[i] = project; } return projects; }
public void SetValuesIntoFormulasTest() { Evaluation[] valuesForEach = new Evaluation[2]; valuesForEach[0] = new Evaluation(); valuesForEach[0].Formulas.Add(@"avg(\)", "42"); valuesForEach[0].Values.Add(@"var", "2"); valuesForEach[1] = new Evaluation(); valuesForEach[1].Formulas.Add(@"avg(%prop_1%\,%prop_2%)", "5"); valuesForEach[1].Values.Add(@"var", "7"); ColumnDefinition[] columns = new ColumnDefinition[2]; columns[0] = new ColumnDefinition { Header = "first", Formula = @"$avg(\)", Type = "Percentage", Width = 5 }; columns[1] = new ColumnDefinition { Header = "second", Formula = @"%var%", Type = "Number", Width = 10 }; ProjectModel[] result = ProjectsHelper.SetValuesIntoFormulas(valuesForEach, columns); Assert.IsTrue(result.Length == 2); Assert.IsTrue(result[0].Properties[0] == "42%"); Assert.IsTrue(result[1].Properties[1] == "7"); }