コード例 #1
0
        public void VerifyThatParametersWithoutStateDependenciesWork()
        {
            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.dataCollectorParameterTestFixture.iteration, this.dataCollectorParameterTestFixture.cat1.ShortName)
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <NoActualStateRow>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.dataCollectorParameterTestFixture.option).ToList();

            var node = dataSource.CreateNodes(
                hierarchy,
                nestedElementTree).First();

            Assert.AreEqual(1, node.GetColumns <DataCollectorStateDependentPerRowDoubleParameter <NoActualStateRow> >().Count());

            Assert.IsTrue(node.GetTable().Columns.Contains("ParameterName"));
            Assert.IsTrue(node.GetTable().Columns.Contains("ParameterState"));
            Assert.IsTrue(node.GetTable().Columns.Contains("ParameterValue"));

            Assert.AreEqual(1, node.GetTable().Rows.Count);

            Assert.AreEqual("typeOne", node.GetTable().Rows[0]["ParameterName"]);
            Assert.AreEqual(DBNull.Value, node.GetTable().Rows[0]["ParameterState"]);
            Assert.AreEqual(11D, node.GetTable().Rows[0]["ParameterValue"]);
        }
コード例 #2
0
        private void VerifyRecursiveStructure(params ElementUsage[] levels)
        {
            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.iteration, this.cat1.ShortName)
                            .AddLevel(this.cat2.ShortName, 3)
                            .AddLevel(this.cat3.ShortName)
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <Row>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.option).ToList();

            // tabular representation built, category hierarchy considered, unneeded subtrees pruned
            var rows = dataSource.GetTable(hierarchy, nestedElementTree).Rows;

            Assert.AreEqual(2, rows.Count);

            if (levels.Length == 2)
            {
                ValidateRow(rows[1], this.ed1, levels[0], levels[1], null, this.eu7);
            }

            if (levels.Length == 3)
            {
                ValidateRow(rows[1], this.ed1, levels[0], levels[1], levels[2], this.eu7);
            }
        }
        public void VerifyThatValuesAreCalculatedCorrectly(string valueArrayValue, double expectedValue1, double expectedValue2)
        {
            this.dataCollectorParameterTestFixture.ed1.Parameter.First().ValueSet.First().Published = new ValueArray <string>(new [] { valueArrayValue });

            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.dataCollectorParameterTestFixture.iteration, this.dataCollectorParameterTestFixture.cat1.ShortName)
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <Row>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.dataCollectorParameterTestFixture.option).ToList();

            var node = dataSource.CreateNodes(
                hierarchy,
                nestedElementTree).First();

            var culture = new CultureInfo("en-GB")
            {
                NumberFormat =
                {
                    NumberDecimalSeparator = ",",
                    NumberGroupSeparator   = "."
                }
            };

            System.Threading.Thread.CurrentThread.CurrentCulture = culture;

            Assert.AreEqual(1, node.GetColumns <DataCollectorDoubleParameter <Row> >().Count());

            Assert.AreEqual(expectedValue1, (double)node.GetTable().Rows[0]["TypeOne"]);

            culture.NumberFormat.NumberDecimalSeparator = ".";
            culture.NumberFormat.NumberGroupSeparator   = ",";

            Assert.AreEqual(expectedValue2, (double)node.GetTable().Rows[0]["TypeOne"]);
        }
コード例 #4
0
        public void VerifyParameterShortNameInitialization()
        {
            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.iteration, this.cat1.ShortName)
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <Row>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.option).ToList();

            var node = dataSource.CreateNodes(
                hierarchy,
                nestedElementTree).First();

            var parameter1 = node.GetColumns <TestParameter1>().Single();

            Assert.AreEqual("type1", parameter1.FieldName);

            var parameter2 = node.GetColumns <TestParameter2>().Single();

            Assert.AreEqual("type2", parameter2.FieldName);

            var computedParameter = node.GetColumns <ComputedTestParameter>().Single();

            Assert.IsNull(computedParameter.FieldName);
        }
コード例 #5
0
        /// <summary>
        /// Assemble the <see cref="IExcelRow{Thing}"/>s
        /// </summary>
        public void Assemble()
        {
            var nestedElementExcelRows = new List <NestedElementExcelRow>();

            IEnumerable <NestedElement> nestedElements;

            if (this.iteration.TopElement == null)
            {
                nestedElements = Enumerable.Empty <NestedElement>();
            }
            else
            {
                var nestedElementTreeGenerator = new NestedElementTreeGenerator();
                nestedElements = nestedElementTreeGenerator.Generate(this.option, this.owner, false);
            }

            // Order the nestedElements by shortname. The Shortname of an NestedElement
            // is related to the path of a NestedElement
            nestedElements = nestedElements.OrderBy(ne => ne.ShortName);

            foreach (var nestedElement in nestedElements)
            {
                var nestedElementExcelRow = new NestedElementExcelRow(nestedElement, this.owner);
                nestedElementExcelRows.Add(nestedElementExcelRow);
            }

            foreach (var nestedElementExcelRow in nestedElementExcelRows)
            {
                var deeprows = nestedElementExcelRow.GetContainedRowsDeep();
                this.excelRows.AddRange(deeprows);
            }
        }
        public void VerifyThatNestedElementExcelRowNameSpacesAreSetForOption()
        {
            var parameter = new Parameter(Guid.NewGuid(), this.cache, this.uri)
            {
                ParameterType = this.length,
                Owner         = this.systemEngineering,
                Scale         = this.meter
            };

            var parameterValueSet = new ParameterValueSet(Guid.NewGuid(), this.cache, this.uri)
            {
                Manual = new ValueArray <string>(new List <string> {
                    "A"
                }),
                Computed = new ValueArray <string>(new List <string> {
                    "B"
                }),
                Formula = new ValueArray <string>(new List <string> {
                    "C"
                }),
                ValueSwitch = ParameterSwitchKind.MANUAL
            };

            parameter.ValueSet.Add(parameterValueSet);
            this.satellite.Parameter.Add(parameter);

            var nestedElementTreeGenerator = new NestedElementTreeGenerator();
            var nestedElements             = nestedElementTreeGenerator.Generate(this.option, this.systemEngineering);

            var elementList = nestedElements.ToList();

            var rootnode = elementList.SingleOrDefault(ne => ne.ElementUsage.Count == 0);

            Assert.IsNotNull(rootnode);
            var rootElementExcelRow = new NestedElementExcelRow(rootnode, this.systemEngineering);
            var spacesRoot          = new string(' ', 3);

            Assert.False(rootElementExcelRow.Name.StartsWith(spacesRoot));

            using (var nodeelement = elementList.SingleOrDefault(ne => ne.ElementUsage.Count > 0))
            {
                Assert.IsNotNull(nodeelement);

                var rootNodeParameter = elementList.Single(ne => ne.ShortName == "SAT");
                var nestedParameter   = rootNodeParameter.NestedParameter.Single();
                nodeelement.NestedParameter.Add(nestedParameter);

                var nestedElementExcelRow   = new NestedElementExcelRow(nodeelement, this.systemEngineering);
                var nestedParameterExcelRow = nestedElementExcelRow.GetContainedRows().ToList()[0];

                var spacesElement = new string(' ', 3 * Math.Abs(nestedElementExcelRow.Level));
                Assert.True(nestedElementExcelRow.Name.StartsWith(spacesElement));

                var spacesParameter = new string(' ', 3 * Math.Abs(nestedParameterExcelRow.Level));
                Assert.AreEqual(nestedElementExcelRow.Level + 1, nestedParameterExcelRow.Level);
                Assert.True(nestedParameterExcelRow.Name.StartsWith(spacesParameter));
            }
        }
        public void VerifyThatNestedParameterExcelRowPropertiesAreSetForParameterSubscription()
        {
            var parameter = new Parameter(Guid.NewGuid(), this.cache, this.uri)
            {
                ParameterType = this.length,
                Scale         = this.meter,
                Owner         = this.systemEngineering
            };

            var parameterValueSet = new ParameterValueSet(Guid.NewGuid(), this.cache, this.uri)
            {
                Manual = new ValueArray <string>(new List <string> {
                    "A"
                }),
                Computed = new ValueArray <string>(new List <string> {
                    "B"
                }),
                Formula = new ValueArray <string>(new List <string> {
                    "C"
                }),
                ValueSwitch = ParameterSwitchKind.MANUAL
            };

            parameter.ValueSet.Add(parameterValueSet);
            this.satellite.Parameter.Add(parameter);

            var parameterSubscription = new ParameterSubscription(Guid.NewGuid(), this.cache, this.uri)
            {
                Owner = this.powerEngineering
            };

            var parameterSubscriptionValueSet = new ParameterSubscriptionValueSet(Guid.NewGuid(), this.cache, this.uri)
            {
                Manual = new ValueArray <string>(new List <string> {
                    "AA"
                }),
                ValueSwitch        = ParameterSwitchKind.MANUAL,
                SubscribedValueSet = parameterValueSet
            };

            parameterSubscription.ValueSet.Add(parameterSubscriptionValueSet);
            parameter.ParameterSubscription.Add(parameterSubscription);

            var nestedElementTreeGenerator = new NestedElementTreeGenerator();
            var nestedElements             = nestedElementTreeGenerator.Generate(this.option, this.powerEngineering);

            var rootnode        = nestedElements.Single(ne => ne.ShortName == "SAT");
            var nestedparameter = rootnode.NestedParameter.Single();

            var excelRow = new NestedParameterExcelRow(nestedparameter);

            Assert.AreEqual("=SAT.l", excelRow.ActualValue);
            Assert.AreEqual("SAT\\l\\option1\\", excelRow.ModelCode);
            Assert.AreEqual("Length", excelRow.Name);
            Assert.AreEqual("PWR [SYS]", excelRow.Owner);
            Assert.AreEqual("l [m]", excelRow.ParameterTypeShortName);
            Assert.AreEqual("NPS", excelRow.Type);
        }
コード例 #8
0
        public void VerifyThatMultipleParametersOfSameTypeAreAllowed()
        {
            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.dataCollectorParameterTestFixture.iteration, this.dataCollectorParameterTestFixture.cat1.ShortName)
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <CorrectRow>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.dataCollectorParameterTestFixture.option).ToList();

            Assert.DoesNotThrow(() => dataSource.CreateNodes(hierarchy, nestedElementTree));
        }
コード例 #9
0
        public void VerifyThatMultipleParametersOfDifferentTypesAreNotAllowed()
        {
            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.dataCollectorParameterTestFixture.iteration, this.dataCollectorParameterTestFixture.cat1.ShortName)
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <ErrorRow>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.dataCollectorParameterTestFixture.option).ToList();

            Assert.Throws <InvalidOperationException>(() => dataSource.CreateNodes(hierarchy, nestedElementTree));
        }
コード例 #10
0
        public void VerifyMultiRootStructureWithParameterCheck()
        {
            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.iteration, this.cat2.ShortName)
                            .AddLevel(this.cat3.ShortName)
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <Row>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.option).ToList();

            // tabular representation built, category hierarchy considered, unneeded subtrees pruned, don't return rows that have no parameters set
            var rows = dataSource.GetTable(hierarchy, nestedElementTree, true).Rows;

            Assert.AreEqual(0, rows.Count);
        }
        public async Task SetUp()
        {
            var path = Path.Combine(TestContext.CurrentContext.TestDirectory, "Data", "allvaluesettypes.zip");

            this.uri = new Uri(path);

            this.credentials = new Credentials("admin", "pass", this.uri);

            this.dal = new JsonFileDal();

            this.session = new Session(this.dal, this.credentials);
            await this.session.Open();

            this.nestedElementTreeGenerator = new NestedElementTreeGenerator();
        }
        public void VerifyThatNodeIdentifiesCategories()
        {
            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.iteration, this.cat1.ShortName)
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <Row>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.option).ToList();

            var node = dataSource.CreateNodes(
                hierarchy,
                nestedElementTree).First();

            Assert.AreEqual(2, node.GetColumns <DataCollectorCategory <Row> >().Count());
        }
コード例 #13
0
        private void VerifyRecursiveStructureWithDenySkipCategorie(bool shouldBeFound, params ElementUsage[] levels)
        {
            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.iteration, this.cat1.ShortName)
                            .AddLevel(this.cat2.ShortName, 3)
                            .AddLevel(this.cat3.ShortName).DenySkipUnknownCategories()
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <Row>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.option).ToList();

            // tabular representation built, category hierarchy considered, unneeded subtrees pruned
            var rows = dataSource.GetTable(hierarchy, nestedElementTree).Rows;

            Assert.AreEqual(shouldBeFound ? 2 : 1, rows.Count);
        }
        public void VerifyThatCorrectColumnNameIsUsed()
        {
            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.dataCollectorParameterTestFixture.iteration, this.dataCollectorParameterTestFixture.cat1.ShortName)
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <Row>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.dataCollectorParameterTestFixture.option).ToList();

            var node = dataSource.CreateNodes(
                hierarchy,
                nestedElementTree).First();

            Assert.AreEqual(1, node.GetColumns <DataCollectorDoubleParameter <Row> >().Count());
            Assert.IsTrue(node.GetTable().Columns.Contains("TypeOne"));
        }
コード例 #15
0
        private void VerifyStructureWithDenySkipCategories(ElementUsage row2Result)
        {
            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.iteration, this.cat1.ShortName)
                            .AddLevel(this.cat2.ShortName)
                            .AddLevel(this.cat3.ShortName).DenySkipUnknownCategories()
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <Row>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.option).ToList();

            // tabular representation built, category hierarchy considered, unneeded subtrees pruned
            var rows = dataSource.GetTable(hierarchy, nestedElementTree).Rows;

            Assert.AreEqual(1, rows.Count);
            ValidateRow(rows[0], this.ed1, this.eu12p1, this.eu2p31);
        }
        public void VerifyElementUsageCategoryValueInitialization()
        {
            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.iteration, this.cat2.ShortName)
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <Row>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.option).ToList();

            var node = dataSource.CreateNodes(
                hierarchy,
                nestedElementTree).First();

            var categories = node.GetColumns <DataCollectorCategory <Row> >().ToList();

            Assert.AreEqual(false, categories.Single(x => x.ShortName == "cat1").Value);
            Assert.AreEqual(true, categories.Single(x => x.ShortName == "cat2").Value);
        }
コード例 #17
0
        public void VerifyComputedParameterInitialization()
        {
            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.iteration, this.cat1.ShortName)
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <Row>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.option).ToList();

            var node = dataSource.CreateNodes(
                hierarchy,
                nestedElementTree).First();

            var computedParameter = node.GetColumns <ComputedTestParameter>().Single();

            Assert.AreEqual(null, computedParameter.ValueSets);
            Assert.AreEqual(null, computedParameter.Owner);
        }
コード例 #18
0
        public void VerifyMultiRootStructure()
        {
            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.iteration, this.cat2.ShortName)
                            .AddLevel(this.cat3.ShortName)
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <Row>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.option).ToList();

            // tabular representation built, category hierarchy considered, unneeded subtrees pruned
            var rows = dataSource.GetTable(hierarchy, nestedElementTree).Rows;

            Assert.AreEqual(2, rows.Count);

            ValidateRow(rows[0], this.eu12p1, this.eu2p31);
            ValidateRow(rows[1], this.eu4, this.eu7);
        }
        public void VerifyCategorySubCategoryInCategoryHierarchy()
        {
            this.ed1.Category.Add(this.subCat);

            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.iteration, this.subCat.ShortName)
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <Row>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.option).ToList();

            var node = dataSource.CreateNodes(
                hierarchy,
                nestedElementTree).First();

            Assert.AreEqual(false, node.GetTable().Columns.Contains(this.superCat.ShortName));
            Assert.AreEqual(true, node.GetTable().Columns.Contains(this.subCat.ShortName));
        }
        public void VerifyCategorySubCategoryActualCategory()
        {
            this.ed1.Category.Add(this.subCat);

            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.iteration, this.cat1.ShortName)
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <Row3>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.option).ToList();

            var node = dataSource.CreateNodes(
                hierarchy,
                nestedElementTree).First();

            var categoryColumns = node.GetColumns <DataCollectorCategory <Row3> >().ToList();

            Assert.AreEqual(this.subCat, categoryColumns.Single(x => x.ShortName == this.superCat.ShortName).ActualCategory);
        }
コード例 #21
0
        public void VerifyThatNodeIdentifiesCollectParentValueParameters()
        {
            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.iteration, this.cat1.ShortName)
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <CollectParentValuesRow>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.option).ToList();

            var dataTable = dataSource.GetTable(
                hierarchy,
                nestedElementTree);

            Assert.IsTrue(dataTable.Columns.Contains($"{nameof(CollectParentValuesRow.parameter1)}"));
            Assert.IsTrue(dataTable.Columns.Contains($"{nameof(CollectParentValuesRow.parameter2)}"));
            Assert.IsTrue(dataTable.Columns.Contains($"{nameof(CollectParentValuesRow.ComputedParameter)}"));
            Assert.IsTrue(dataTable.Columns.Contains($"{nameof(CollectParentValuesRow.parameter1)}_{this.cat1.ShortName}"));
            Assert.IsTrue(dataTable.Columns.Contains($"{nameof(CollectParentValuesRow.ComputedParameter)}_{this.cat1.ShortName}"));
        }
        public void VerifyThatNestedParameterExcelRowPropertiesAreSetForParameterWithTextParameterType()
        {
            var parameter = new Parameter(Guid.NewGuid(), this.cache, this.uri)
            {
                ParameterType = this.text,
                Owner         = this.systemEngineering
            };

            var parameterValueSet = new ParameterValueSet(Guid.NewGuid(), this.cache, this.uri)
            {
                Manual = new ValueArray <string>(new List <string> {
                    "A"
                }),
                Computed = new ValueArray <string>(new List <string> {
                    "B"
                }),
                Formula = new ValueArray <string>(new List <string> {
                    "C"
                }),
                ValueSwitch = ParameterSwitchKind.MANUAL
            };

            parameter.ValueSet.Add(parameterValueSet);
            this.satellite.Parameter.Add(parameter);

            var nestedElementTreeGenerator = new NestedElementTreeGenerator();
            var nestedElements             = nestedElementTreeGenerator.Generate(this.option, this.systemEngineering);

            var rootnode        = nestedElements.Single(ne => ne.ShortName == "SAT");
            var nestedparameter = rootnode.NestedParameter.Single();

            var excelRow = new NestedParameterExcelRow(nestedparameter);

            Assert.AreEqual("=SAT.txt", excelRow.ActualValue);
            Assert.AreEqual("SAT\\txt\\option1\\", excelRow.ModelCode);
            Assert.AreEqual("Text", excelRow.Name);
            Assert.AreEqual("SYS", excelRow.Owner);
            Assert.AreEqual("txt", excelRow.ParameterTypeShortName);
            Assert.AreEqual("NP", excelRow.Type);
        }
コード例 #23
0
        public void VerifyNestedParameterInitialization()
        {
            var hierarchy = new CategoryDecompositionHierarchy
                            .Builder(this.iteration, this.cat2.ShortName)
                            .Build();

            var dataSource        = new DataCollectorNodesCreator <Row>();
            var nestedElementTree = new NestedElementTreeGenerator().Generate(this.option).ToList();

            var node = dataSource.CreateNodes(
                hierarchy,
                nestedElementTree).First(x => x.ElementBase.Iid == this.eu2.Iid);

            var parameter1 = node.GetColumns <TestParameter1>().Single();

            Assert.AreEqual("-21", parameter1.ValueSets.FirstOrDefault()?.ActualValue.First());
            Assert.AreEqual(this.elementOwner, parameter1.Owner);

            var parameter2 = node.GetColumns <TestParameter2>().Single();

            Assert.AreEqual("-22", parameter2.ValueSets.FirstOrDefault()?.ActualValue.First());
            Assert.AreEqual(this.elementOwner, parameter2.Owner);
        }
コード例 #24
0
        public void VerifyGetChildrenWorks()
        {
            var nestedElementTreeGenerator = new NestedElementTreeGenerator();
            var nestedElements             = nestedElementTreeGenerator.Generate(this.option, this.domain).ToList();

            Assert.AreEqual(7, nestedElements.Count);

            var children = nestedElements.First(x => x.IsRootElement).GetChildren(nestedElements).ToList();

            Assert.AreEqual(1, children.Count);
            Assert.AreEqual(this.elementUsage1.Name, children.First().Name);

            var children2 = children.First().GetChildren(nestedElements).ToList();

            Assert.AreEqual(3, children2.Count);
            Assert.AreEqual(this.elementUsage2.Name, children2.First().Name);

            var sameInstanceElementUsageNestedElement1 = nestedElements.Single(x => x.ElementUsage.LastOrDefault() == this.elementUsage3_1);
            var sameInstanceElementUsageNestedElement2 = nestedElements.Single(x => x.ElementUsage.LastOrDefault() == this.elementUsage3_2);

            Assert.AreEqual(1, sameInstanceElementUsageNestedElement1.GetChildren(nestedElements).Count());
            Assert.AreEqual(1, sameInstanceElementUsageNestedElement2.GetChildren(nestedElements).Count());
        }
        public void VerifyThatNestedParameterExcelRowPropertiesAreSetForCompoundParameter()
        {
            var compoundParameterType = new CompoundParameterType(Guid.NewGuid(), this.cache, this.uri)
            {
                Name      = "coordinate",
                ShortName = "coord"
            };

            var component_1 = new ParameterTypeComponent(Guid.NewGuid(), this.cache, this.uri)
            {
                ParameterType = this.length,
                Scale         = this.meter,
                ShortName     = "x"
            };

            compoundParameterType.Component.Add(component_1);

            var component_2 = new ParameterTypeComponent(Guid.NewGuid(), this.cache, this.uri)
            {
                ParameterType = this.text,
                ShortName     = "txt"
            };

            compoundParameterType.Component.Add(component_2);

            var parameter = new Parameter(Guid.NewGuid(), this.cache, this.uri)
            {
                ParameterType = compoundParameterType,
                Owner         = this.systemEngineering
            };

            var parameterValueSet = new ParameterValueSet(Guid.NewGuid(), this.cache, this.uri)
            {
                Manual = new ValueArray <string>(new List <string> {
                    "A", "A1"
                }),
                Computed = new ValueArray <string>(new List <string> {
                    "B", "B1"
                }),
                Formula = new ValueArray <string>(new List <string> {
                    "C", "C1"
                }),
                ValueSwitch = ParameterSwitchKind.MANUAL
            };

            parameter.ValueSet.Add(parameterValueSet);
            this.satellite.Parameter.Add(parameter);

            var nestedElementTreeGenerator = new NestedElementTreeGenerator();
            var nestedElements             = nestedElementTreeGenerator.Generate(this.option, this.systemEngineering);

            var rootnode          = nestedElements.Single(ne => ne.ShortName == "SAT");
            var nestedparameter_1 = rootnode.NestedParameter.Single(x => x.Component == component_1);

            var excelRow_1 = new NestedParameterExcelRow(nestedparameter_1);

            Assert.AreEqual("=SAT.coord.x", excelRow_1.ActualValue);
            Assert.AreEqual("SAT\\coord.x\\option1\\", excelRow_1.ModelCode);
            Assert.AreEqual("coordinate", excelRow_1.Name);
            Assert.AreEqual("SYS", excelRow_1.Owner);
            Assert.AreEqual("coord.x [m]", excelRow_1.ParameterTypeShortName);
            Assert.AreEqual("NP", excelRow_1.Type);

            var nestedparameter_2 = rootnode.NestedParameter.Single(x => x.Component == component_2);

            var excelRow_2 = new NestedParameterExcelRow(nestedparameter_2);

            Assert.AreEqual("=SAT.coord.txt", excelRow_2.ActualValue);
            Assert.AreEqual("SAT\\coord.txt\\option1\\", excelRow_2.ModelCode);
            Assert.AreEqual("coordinate", excelRow_2.Name);
            Assert.AreEqual("SYS", excelRow_2.Owner);
            Assert.AreEqual("coord.txt", excelRow_2.ParameterTypeShortName);
            Assert.AreEqual("NP", excelRow_2.Type);
        }
コード例 #26
0
    /// <summary>
    /// A must override method that returns the actual data object.
    /// A data object could be anything, except a dynamic/ExpandoObject type.
    /// </summary>
    /// <returns>
    /// The data as an object.
    /// </returns>
    public override object CreateDataObject()
    {
        // Select an Option from the current Iteration.
        // this.SelectOption is a method of the OptionDependentDataCollector class
        // After selection the SelectedOption property will be set.
        this.SelectOption();
        var option = this.SelectedOption;

        // Get the tree of NestedElements for the selected Option.
        var nestedElementTree = new NestedElementTreeGenerator().Generate(option).ToList();

        // Create a CategoryDecompositionHierarchy instance that reads all elements in the ProductTree that
        // comply to the Hierarchy of categories defined here:
        //
        // - Missions
        //   | Segments
        //     | Systems [1..5 nesting levels]
        //       | Subsystems
        //
        // In case there are multiple nested Equipment levels in the model, the deepest level is selected
        // as the source for the parameter values.
        // The fieldnames in the result DataSource are set explicitly (second parameter of AddLevel method).
        var functionHierarchy = new CategoryDecompositionHierarchy
                                .Builder(this.Iteration)
                                .AddLevel("Missions")
                                .AddLevel("Segments")
                                .AddLevel("Systems", "SystemName", 5)
                                .AddLevel("Subsystems", "SubsystemName")
                                .Build();

        // Create a CategoryDecompositionHierarchy instance that reads all elements in the ProductTree that
        // comply to the Hierarchy of categories defined here:
        //
        // - Missions
        //   | Segments
        //     | Systems [1..5 nesting levels]
        //       | Subsystems
        //
        // In case there are multiple nested Elements levels in the model, the deepest level is selected
        // as the source for the parameter values.
        // The fieldnames in the result DataSource are set explicitly (second parameter of AddLevel method).
        var productHierarchy = new CategoryDecompositionHierarchy
                               .Builder(this.Iteration)
                               .AddLevel("Missions")
                               .AddLevel("Segments")
                               .AddLevel("Elements", "SystemName", 5)
                               .AddLevel("Equipment", "SubsystemName")
                               .Build();


        // Build a DataTable for the productHierarchy level (Product level)
        // The third parameter in the GetTable method indicates that elements that do not contain
        // any wanted parameters will not be shown in the result table.
        var resultDataSource =
            new DataCollectorNodesCreator <RowRepresentation>()
            .GetTable(productHierarchy, nestedElementTree, true);

        // Build a DataTable for the functionHierarchy level (Function level)
        // The third parameter in the GetTable method indicates that elements that do not contain
        // any wanted parameters will not be shown in the result table.
        var secondDataSource =
            new DataCollectorNodesCreator <RowRepresentation>()
            .GetTable(functionHierarchy, nestedElementTree, true);

        // Merge the two datatables
        resultDataSource.Merge(secondDataSource);

        var newView = new DataView(resultDataSource);

        newView.RowFilter          = "Segments = '" + Variables.SpaceSegmentName + "' And (P_on <> 0 Or P_stby <> 0)";
        resultDataSource           = newView.ToTable();
        resultDataSource.TableName = "MainData";



        //Build dynamic tables
        var systemModeList = this.Iteration.ActualFiniteStateList.FirstOrDefault(x => x.ShortName == Variables.SystemModesShortName);

        if (systemModeList == null)
        {
            System.Windows.MessageBox.Show("Please set the correct ShortName of the System Mode ActualFiniteStateList in the Variables section of this report's code file.");
        }

        var stateList = systemModeList.ActualState.ToList().Select(x => x.ShortName);

        foreach (var state in stateList)
        {
            this.DynamicTableCellsCollector.AddValueTableCell("dynamicDutyCycleHeaderTable", state);
            this.DynamicTableCellsCollector.AddFieldTableCell("dynamicDutyCycleTable", "P_duty_cyc" + state);
        }

        return(resultDataSource);
    }
コード例 #27
0
ファイル: Datasource.cs プロジェクト: RHEAGROUP/COMET-Reports
    /// <summary>
    /// A must override method that returns the actual data object.
    /// A data object could be anything, except a dynamic/ExpandoObject type.
    /// </summary>
    /// <returns>
    /// The data as an object.
    /// </returns>
    public override object CreateDataObject()
    {
        // Select an Option from the current Iteration.
        // this.SelectOption is a method of the OptionDependentDataCollector class
        // After selection the SelectedOption property will be set.
        this.SelectOption();
        var option = this.SelectedOption;

        // Get the tree of NestedElements for the selected Option.
        var nestedElementTree = new NestedElementTreeGenerator().Generate(option).ToList();

        // Create a CategoryDecompositionHierarchy instance that reads all elements in the ProductTree that
        // comply to the Hierarchy of categories defined here:
        //
        // - Missions
        //   | Segments
        //     | Systems [1..5 nesting levels]
        //       | Subsystems
        //
        // In case there are multiple nested Equipment levels in the model, the deepest level is selected
        // as the source for the parameter values.
        // The fieldnames in the result DataSource are set explicitly (second parameter of AddLevel method).
        var functionHierarchy = new CategoryDecompositionHierarchy
                                .Builder(this.Iteration)
                                .AddLevel("Missions")
                                .AddLevel("Segments")
                                .AddLevel("Systems", "SystemName", 5)
                                .AddLevel("Subsystems", "SubsystemName")
                                .Build();

        // Create a CategoryDecompositionHierarchy instance that reads all elements in the ProductTree that
        // comply to the Hierarchy of categories defined here:
        //
        // - Missions
        //   | Segments
        //     | Systems [1..5 nesting levels]
        //       | Subsystems
        //
        // In case there are multiple nested Elements levels in the model, the deepest level is selected
        // as the source for the parameter values.
        // The fieldnames in the result DataSource are set explicitly (second parameter of AddLevel method).
        var productHierarchy = new CategoryDecompositionHierarchy
                               .Builder(this.Iteration)
                               .AddLevel("Missions")
                               .AddLevel("Segments")
                               .AddLevel("Elements", "SystemName", 5)
                               .AddLevel("Equipment", "SubsystemName")
                               .Build();


        // Build a DataTable for the productHierarchy level (Product level)
        // The third parameter in the GetTable method indicates that elements that do not contain
        // any wanted parameters will not be shown in the result table.
        var resultDataSource =
            new DataCollectorNodesCreator <RowRepresentation>()
            .GetTable(productHierarchy, nestedElementTree, true);

        // Build a DataTable for the functionHierarchy level (Function level)
        // The third parameter in the GetTable method indicates that elements that do not contain
        // any wanted parameters will not be shown in the result table.
        var secondDataSource =
            new DataCollectorNodesCreator <RowRepresentation>()
            .GetTable(functionHierarchy, nestedElementTree, true);

        // Merge the two datatables
        resultDataSource.Merge(secondDataSource);

        var newView = new DataView(resultDataSource);

        newView.RowFilter          = "Segments = '" + Variables.SpaceSegmentName + "' And (P_on <> 0 Or P_stby <> 0)";
        resultDataSource           = newView.ToTable();
        resultDataSource.TableName = "MainData";



        //---------------------------------------------------
        // Create distinct rows for all ED's and summarize the NumberOfItems
        //---------------------------------------------------
        var resultColumnArray = resultDataSource.Columns.Cast <DataColumn>()
                                .Select(x => x.ColumnName)
                                .Except(new[] { "NumberOfItems", "n_items", "SubsystemName", "SystemName_3", "SystemName_4", "SystemName_5" })
                                .ToArray();

        var distinctResultDataSource = new DataView(resultDataSource).ToTable(true, resultColumnArray);

        distinctResultDataSource.Columns.Add("NumberOfItems", typeof(double));

        // Summarize the relevant data and write to the merged DataRow
        foreach (DataRow distinctRow in distinctResultDataSource.Rows)
        {
            distinctRow["NumberOfItems"] = 0D;
            foreach (DataRow row in resultDataSource.Rows)
            {
                var write = true;
                foreach (var columnName in resultColumnArray)
                {
                    if (!row[columnName].Equals(distinctRow[columnName]))
                    {
                        write = false;
                        break;
                    }
                }
                if (write)
                {
                    distinctRow["NumberOfItems"] = ((double)distinctRow["NumberOfItems"]) + ((double)row["NumberOfItems"]);
                }
            }
        }
        resultDataSource = distinctResultDataSource;
        //---------------------------------------------------


        //Build dynamic tables
        var systemModeList = this.Iteration.ActualFiniteStateList.FirstOrDefault(x => x.ShortName == Variables.SystemModesShortName);

        if (systemModeList == null)
        {
            System.Windows.MessageBox.Show("Please set the correct ShortName of the System Mode ActualFiniteStateList in the Variables section of this report's code file.");
        }

        var stateList = systemModeList.ActualState.ToList().Select(x => x.ShortName);

        foreach (var state in stateList)
        {
            var newMeanColumn = new DataColumn("P_mean" + state, typeof(double));
            newMeanColumn.DefaultValue = 0D;
            resultDataSource.Columns.Add(newMeanColumn);

            var newMaxColumn = new DataColumn("P_max" + state, typeof(double));
            newMaxColumn.DefaultValue = 0D;
            resultDataSource.Columns.Add(newMaxColumn);

            this.DynamicTableCellsCollector.AddValueTableCell("dynamicDutyCycleHeaderTable", state);
            this.DynamicTableCellsCollector.AddValueTableCell("dynamicP_meanHeaderTable", state);
            this.DynamicTableCellsCollector.AddValueTableCell("dynamicP_maxHeaderTable", state);

            this.DynamicTableCellsCollector.AddFieldTableCell("dynamicDutyCycleTable", "P_duty_cyc" + state);
            this.DynamicTableCellsCollector.AddFieldTableCell("dynamicP_meanTable", "P_mean" + state);
            this.DynamicTableCellsCollector.AddFieldTableCell("dynamicP_maxTable", "P_max" + state);

            this.DynamicTableCellsCollector.AddExpressionTableCell("dynamicP_meanOwnerTotalsTable", "sumSum([P_mean" + state + "])");
            this.DynamicTableCellsCollector.AddExpressionTableCell("dynamicP_meanSystemTotalsTable", "sumSum([P_mean" + state + "])");
            this.DynamicTableCellsCollector.AddExpressionTableCell("dynamicP_meanTotalsTable", "sumSum([P_mean" + state + "])");
            this.DynamicTableCellsCollector.AddExpressionTableCell("dynamicP_meanTotalsInclMarginTable", "sumSum([P_mean" + state + "] * (1 + ?SystemMargin / 100))");

            this.DynamicTableCellsCollector.AddExpressionTableCell("dynamicP_maxOwnerTotalsTable", "sumSum([P_max" + state + "])");
            this.DynamicTableCellsCollector.AddExpressionTableCell("dynamicP_maxSystemTotalsTable", "sumSum([P_max" + state + "])");
            this.DynamicTableCellsCollector.AddExpressionTableCell("dynamicP_maxTotalsTable", "sumSum([P_max" + state + "])");
            this.DynamicTableCellsCollector.AddExpressionTableCell("dynamicP_maxTotalsInclMarginTable", "sumSum([P_max" + state + "] * (1 + (?SystemMargin / 100)))");

            foreach (DataRow row in resultDataSource.Rows)
            {
                var emptyValues = new [] { "", "-" }.ToList();

                var P_duty_cyc        = emptyValues.Contains(row["P_duty_cyc" + state].ToString()) ? -1D : double.Parse(row["P_duty_cyc" + state].ToString());
                var redundancy_type   = row["redundancy_type"].ToString();
                var redundancy_scheme = row["redundancy_scheme"].ToString();
                var redundancy_k      = emptyValues.Contains(row["redundancy_k"].ToString()) ? 0D : double.Parse(row["redundancy_k"].ToString());
                var redundancy_n      = emptyValues.Contains(row["redundancy_n"].ToString()) ? 0D : double.Parse(row["redundancy_n"].ToString());
                var P_on            = emptyValues.Contains(row["P_on"].ToString()) ? 0D : double.Parse(row["P_on"].ToString());
                var P_stby          = emptyValues.Contains(row["P_stby"].ToString()) ? 0D : double.Parse(row["P_stby"].ToString());
                var NumberOfItems   = emptyValues.Contains(row["NumberOfItems"].ToString()) ? 0D : double.Parse(row["NumberOfItems"].ToString());
                var maturity_margin = emptyValues.Contains(row["maturity_margin"].ToString()) ? 0D : double.Parse(row["maturity_margin"].ToString());

                // --------------------------------------------------------
                // Calculate P_mean
                // --------------------------------------------------------
                var P_mean = 0D;

                if (P_duty_cyc != -1)
                {
                    P_mean = double.NaN;

                    if (redundancy_type == "External")
                    {
                        if (redundancy_scheme == "Cold")
                        {
                            P_mean = (redundancy_k / redundancy_n) * NumberOfItems * ((P_on * P_duty_cyc) + (P_stby * (1 - P_duty_cyc))) * (1 + maturity_margin / 100);
                        }
                        else if (redundancy_scheme == "Standby")
                        {
                            P_mean = ((redundancy_k / redundancy_n) * NumberOfItems * ((P_on * P_duty_cyc) + (P_stby * (1 - P_duty_cyc)))) + (((redundancy_n - redundancy_k) / redundancy_n) * NumberOfItems * P_stby) * (1 + maturity_margin / 100);
                        }
                    }

                    if (Double.IsNaN(P_mean))
                    {
                        P_mean = NumberOfItems * ((P_on * P_duty_cyc) + (P_stby * (1 - P_duty_cyc))) * (1 + maturity_margin / 100);
                    }
                }

                row["P_mean" + state] = P_mean;


                // --------------------------------------------------------
                // Calculate P_max
                // --------------------------------------------------------
                var P_max = 0D;

                if (P_duty_cyc != -1)
                {
                    P_max = double.NaN;
                    if (P_duty_cyc == 0)
                    {
                        if (redundancy_type == "External")
                        {
                            if (redundancy_scheme == "Cold")
                            {
                                P_max = (redundancy_k / redundancy_n) * NumberOfItems * P_stby * (1 + maturity_margin / 100);
                            }
                        }

                        if (Double.IsNaN(P_max))
                        {
                            P_max = NumberOfItems * P_stby * (1 + maturity_margin / 100);
                        }
                    }
                    else
                    {
                        if (redundancy_type == "External")
                        {
                            if (redundancy_scheme == "Cold")
                            {
                                P_max = (redundancy_k / redundancy_n) * NumberOfItems * P_on * (1 + maturity_margin / 100);
                            }
                            else if (redundancy_scheme == "Standby")
                            {
                                P_max = ((redundancy_k / redundancy_n) * NumberOfItems * P_on) + (((redundancy_n - redundancy_k) / redundancy_n) * NumberOfItems * P_stby) * (1 + maturity_margin / 100);
                            }
                        }

                        if (Double.IsNaN(P_max))
                        {
                            P_max = NumberOfItems * P_on * (1 + maturity_margin / 100);
                        }
                    }
                }

                row["P_max" + state] = P_max;
            }
        }

        return(resultDataSource);
    }
        public void VerifyThatNestedParameterExcelRowPropertiesAreSetForParameterOverride()
        {
            var parameter = new Parameter(Guid.NewGuid(), this.cache, this.uri)
            {
                ParameterType = this.length,
                Scale         = this.meter,
                Owner         = this.powerEngineering
            };

            var parameterValueSet = new ParameterValueSet(Guid.NewGuid(), this.cache, this.uri)
            {
                Manual = new ValueArray <string>(new List <string> {
                    "A"
                }),
                Computed = new ValueArray <string>(new List <string> {
                    "B"
                }),
                Formula = new ValueArray <string>(new List <string> {
                    "C"
                }),
                ValueSwitch = ParameterSwitchKind.MANUAL,
            };

            parameter.ValueSet.Add(parameterValueSet);
            this.battery.Parameter.Add(parameter);

            var parameterOverride = new ParameterOverride(Guid.NewGuid(), this.cache, this.uri);

            parameterOverride.Owner = this.powerEngineering;

            var paameterOverrideValueSet = new ParameterOverrideValueSet(Guid.NewGuid(), this.cache, this.uri)
            {
                Manual = new ValueArray <string>(new List <string> {
                    "A"
                }),
                Computed = new ValueArray <string>(new List <string> {
                    "B"
                }),
                Formula = new ValueArray <string>(new List <string> {
                    "C"
                }),
                ValueSwitch       = ParameterSwitchKind.MANUAL,
                ParameterValueSet = parameterValueSet
            };

            parameterOverride.ValueSet.Add(paameterOverrideValueSet);
            parameterOverride.Parameter = parameter;

            this.batteryUsage.ParameterOverride.Add(parameterOverride);

            var nestedElementTreeGenerator = new NestedElementTreeGenerator();
            var nestedElements             = nestedElementTreeGenerator.Generate(this.option, this.powerEngineering);

            foreach (var nestedElement in nestedElements)
            {
                Console.WriteLine(nestedElement.ShortName);
            }

            var batteryNode     = nestedElements.Single(ne => ne.ShortName == "SAT.batt");
            var nestedparameter = batteryNode.NestedParameter.Single();

            var excelRow = new NestedParameterExcelRow(nestedparameter);

            Assert.AreEqual("=BAT.l", excelRow.ActualValue);
            Assert.AreEqual("SAT.batt\\l\\option1\\", excelRow.ModelCode);
            Assert.AreEqual("Length", excelRow.Name);
            Assert.AreEqual("PWR", excelRow.Owner);
            Assert.AreEqual("l [m]", excelRow.ParameterTypeShortName);
            Assert.AreEqual("NP", excelRow.Type);
        }
コード例 #29
0
        /// <summary>
        /// Finds and returns <see cref="NestedParameter"/>s by their <see cref="NestedParameter.Path"/>s in the <see cref="Option"/>'s <see cref="NestedParameter"/>
        /// </summary>
        /// <param name="path">The path to search for in all this <see cref="Option"/>'s <see cref="NestedParameter.Path"/> properties.</param>
        /// <returns>An <see cref="IEnumerable{NestedParameter}"/> containing all found <see cref="NestedParameter"/>s. </returns>
        public IEnumerable <NestedParameter> GetNestedParameterValueSetsByPath(string path)
        {
            var allParameters = new NestedElementTreeGenerator().GetNestedParameters(this);

            return(this.GetNestedParameterValueSetsByPath(path, allParameters).ToList());
        }
コード例 #30
0
ファイル: Datasource.cs プロジェクト: RHEAGROUP/COMET-Reports
	/// <summary>
	/// A must override method that returns the actual data object.
	/// A data object could be anything, except a dynamic/ExpandoObject type.
	/// </summary>
	/// <returns>
	/// The data as an object.
	/// </returns>
	public override object CreateDataObject()
	{
		// Select an Option from the current Iteration.
		// this.SelectOption is a method of the OptionDependentDataCollector class
		// After selection the SelectedOption property will be set.
		this.SelectOption();
		var option = this.SelectedOption;

		// Get the tree of NestedElements for the selected Option.
		var nestedElementTree = new NestedElementTreeGenerator().Generate(option).ToList();

		// Create a CategoryDecompositionHierarchy instance that reads all elements in the ProductTree that
		// comply to the Hierarchy of categories defined here.
		// The Category hierarchy of elements in the product tree should be like:
		//
		//   Missions
		//   | Segments
		//     | Elements [1..5 nesting levels]
		//       | Equipment
		//
		// In case there are multiple nested Equipment levels in the model, the deepest level is selected
		// as the source for the parameter values.
		var productHierarchy = new CategoryDecompositionHierarchy
	        .Builder(this.Iteration)
	        .AddLevel("Missions")
			.AddLevel("Segments")
			.AddLevel("Elements", 5)
	        .AddLevel("Equipment")
	        .Build();

		// Build a DataTable for the productHierarchy level (Product level)
	    var resultDataSource =
	        new DataCollectorNodesCreator<MainDataRow>()
	        	.GetTable(productHierarchy, nestedElementTree);



		//---------------------------------------------------
		// Create distinct rows for all elements and summarize the NoOfItems
		//---------------------------------------------------
		var resultColumnArray = resultDataSource.Columns.Cast<DataColumn>()
                                 .Select(x => x.ColumnName)
                                 .Except(new [] {"NumberOfItems", "n_items", "Equipment"})
                                 .ToArray();  

		var distinctResultDataSource = new DataView(resultDataSource).ToTable(true, resultColumnArray);
		distinctResultDataSource.Columns.Add("NumberOfItems", typeof(double));
		distinctResultDataSource.Columns.Add("Equipment", typeof(string));

		foreach (DataRow distinctRow in distinctResultDataSource.Rows)
		{
			distinctRow["NumberOfItems"] = 0D;
			var writeElementDefinitionName = false;
			foreach (DataRow row in resultDataSource.Rows) 
			{
				var write = true;
				foreach (var columnName in resultColumnArray) 
				{
					if (!row[columnName].Equals(distinctRow[columnName]))
					{
						write = false;
						break;
					}
				}
				if (write) 
				{
					distinctRow["NumberOfItems"] = ((double)distinctRow["NumberOfItems"]) + ((double)row["NumberOfItems"]);

					if (writeElementDefinitionName) 
					{
						distinctRow["Equipment"] = (string)row["ElementDefinitionName"];
					}
					else 
					{
						distinctRow["Equipment"] = (string)row["Equipment"];
					}

					writeElementDefinitionName = true;
				}
			}
		}
		resultDataSource = distinctResultDataSource;
		//---------------------------------------------------



		// Create a DataView that contains all Distinct values in the resultDataSource's Segments column,
		var segmentsTable = new DataView(resultDataSource).ToTable(true, "Segments");

		// Create the DataSet that will be returned by this CreateDataObject method.
		var dataSet = new DataSet();

		// Find the data rows that contain a Segments name that is equal to the SpaceSegmentName set in the top of this file
		// and add that table to the DataSet.
		foreach (DataRow dataRow in segmentsTable.Rows)
		{
			var segment = dataRow["Segments"].ToString();

			if ((segment) == Variables.SpaceSegmentName)
			{
				var newView = new DataView(resultDataSource);
				newView.RowFilter = "Segments = '" + segment + "'";
				var newTable = newView.ToTable();
				newTable.TableName = "MainData";
				dataSet.Tables.Add(newTable);
			}
		}

		return dataSet;
	}