protected void Page_Load(object sender, EventArgs e) { //create testlist for creating dropdown list iteams dynamically DOEgbXMLTestDetail testList = new DOEgbXMLTestDetail(); testList.InitializeTestResultStrings(); //create dropdownlist items base on the tests if (DropDownList1 != null) { string selectedValue = DropDownList1.SelectedValue; //clear all iteam DropDownList1.Items.Clear(); foreach (DOEgbXMLTestDetail detail in testList.TestDetailList) { //if test is the one selected before select it if (detail.testName == selectedValue) { DropDownList1.Items.Add(new ListItem(detail.testName, detail.testName, true)); DropDownList1.SelectedValue = selectedValue; } else { DropDownList1.Items.Add(new ListItem(detail.testName, detail.testName)); } } } if (DropDownList2 != null) { string selectedValue = DropDownList2.SelectedValue; //clear all iteam DropDownList2.Items.Clear(); //get all of the available XSDs var root = AppDomain.CurrentDomain.BaseDirectory; var path = root + "SupportFiles//XSD"; string[] files = Directory.GetFiles(path, "*.xsd"); for (int i = 0; i < files.Length; i++) { files[i] = Path.GetFileName(files[i]); } foreach (string file in files) { //if test is the one selected before select it if (file == selectedValue) { DropDownList2.Items.Add(new ListItem(file, file, true)); DropDownList2.SelectedValue = selectedValue; } else { DropDownList2.Items.Add(new ListItem(file, file)); } } } if (TestSummuryLabel != null) { //show the test summary of the selected test foreach (DOEgbXMLTestDetail detail in testList.TestDetailList) { if (detail.testName == DropDownList1.SelectedValue) { TestSummuryLabel.Text = detail.testSummary; break; } } } }
private void ProcessValidXML(XMLParser parser, XmlReader xmlreader2) { // Phase 2 Testing XmlDocument myxml = new XmlDocument(); myxml.Load(xmlreader2); //3-get the namespace XmlNamespaceManager nsm = parser.getnsmanager(myxml); //figure out if metric or USIP (we have not found a reason to use this yet) parser.getunits(nsm, myxml); /* Begin Parsing the XML and reporting on it----------------------------------------------------------*/ //make a reporting object DOEgbXMLPhase2Report report = new DOEgbXMLPhase2Report(); /* Basic Uniqueness Constraints check-------------------------------------------------*/ //Basic requirements check // Setup the results view for the log and web. log = ""; TestResultPanel.Controls.Add(new LiteralControl("<div class='well-lg'><h3>Test Sections</h3><table class='table table-bordered'><tr class='info'><td>Test Section Name</td><td>Tolerances</td><td>Pass/Fail</td></tr>")); //first create a list of lists that is indexed identically to the drop down list the user selects TestDetail = new DOEgbXMLTestDetail(); //then populate the list of lists. All indexing is done "by hand" in InitializeTestResultStrings() TestDetail.InitializeTestResultStrings(); //Set up the Global Pass/Fail criteria for the test case file TestCriteria = new DOEgbXMLTestCriteriaObject(); TestCriteria.InitializeTestCriteriaWithTestName(TestToRun); // ("Test1"); // Reports //ensure that all names of spaces are unique--------------------------------------------------------------------------------------------------------Unique_Space_ID_Test// report.testType = TestType.Unique_Space_ID_Test; report = DOEgbXML.gbXMLSpaces.UniqueSpaceIdTest2(myxml, nsm, report); ProcessReport(report, true); report.Clear(); //ensure that all space boundary names are unique--------------------------------------------------------------------------------------------------Unique_Space_Boundary// XmlNodeList nodes = myxml.SelectNodes("/gbXMLv5:gbXML/gbXMLv5:Campus/gbXMLv5:Building/gbXMLv5:Space/gbXMLv5:SpaceBoundary", nsm); if (nodes.Count > 0) { spaceBoundsPresent = true; report.testType = TestType.Unique_Space_Boundary; report = DOEgbXML.gbXMLSpaces.UniqueSpaceBoundaryIdTest2(myxml, nsm, report); ProcessReport(report, true); report.Clear(); } else { //needs to be included so the report can be processed report.testType = TestType.Unique_Space_Boundary; report.passOrFail = true; report.longMsg = "A test is usually performed here to ensure Space Boundaries have valid naming conventions. This test was skipped (legally) because your file does not have space boundaries present. Continuing to next test."; ProcessReport(report, true); report.Clear(); } //Space Tests //make a simplified representation of the spaces List <DOEgbXML.gbXMLSpaces> spaces = DOEgbXML.gbXMLSpaces.getSimpleSpaces(myxml, nsm); //4-check for self-intersecting polygons //report = DOEgbXML.gbXMLSpaces.SpaceSurfacesSelfIntersectionTest(spaces, report); //report.Clear(); //check that all polyloops are in a counterclockwise direction-----------------------------------------------------------------------------------------Space_Surfaces_CC// report = DOEgbXML.gbXMLSpaces.SpaceSurfacesCCTest2(spaces, report); report.testType = TestType.Space_Surfaces_CC; ProcessReport(report, true); report.Clear(); //check for non-planar objects for all Spaces' polyloops-------------------------------------------------------------------------------------------Space_Surfaces_Planar// report.coordtol = DOEgbXMLBasics.Tolerances.VectorAngleTolerance; report = DOEgbXML.gbXMLSpaces.SpaceSurfacesPlanarTest(spaces, report); report.testType = TestType.Space_Surfaces_Planar; ProcessReport(report, true); report.Clear(); //valid space enclosure?---------------------------------------------------------------------------------------------------------------------------Check_Space_Enclosure// report.tolerance = 0.0001; //when we are comparing angles in this function, we are testing the angle between dot products report.vectorangletol = DOEgbXMLBasics.Tolerances.dotproducttol; report.lengthtol = DOEgbXMLBasics.Tolerances.lengthTolerance; //toler report.coordtol = DOEgbXMLBasics.Tolerances.coordToleranceIP; report = Validator.CheckSpaceEnclosureSG(spaces, report); report.testType = TestType.Check_Space_Enclosure; ProcessReport(report, true); report.Clear(); /* Surface tests----------------------------------------------------------------------------------*/ /* Basic Requirements ----------------------------------------------------------------------------*/ //Are there at least 4 surface definitions? (see the surface requirements at the campus node)-------------------------------------------------------At_Least_4_Surfaces// report.testType = TestType.At_Least_4_Surfaces; report = SurfaceDefinitions.AtLeast4Surfaces(myxml, nsm, report); ProcessReport(report, true); report.Clear(); //Does the AdjacentSpaceId not exceed the max number allowable?-----------------------------------------------------------------------------------------Two_Adj_Space_Id// //this needs to be updated! report.testType = TestType.Two_Adj_Space_Id; report = SurfaceDefinitions.AtMost2SpaceAdjId(myxml, nsm, report); ProcessReport(report, true); report.Clear(); //Are all required elements and attributes in place?---------------------------------------------------------------------------------------------Required_Surface_Fields// //report.testType = TestType.Required_Surface_Fields; //report = SurfaceDefinitions.RequiredSurfaceFields(myxml, nsm, report); //ProcessReport(report, true); //report.Clear(); //ensure that all names of surfaces are unique------------------------------------------------------------------------------------------------------Surface_ID_Uniqueness// report.testType = TestType.Surface_ID_Uniqueness; report = DOEgbXML.SurfaceDefinitions.SurfaceIDUniquenessTest(myxml, nsm, report); ProcessReport(report, true); report.Clear(); //now grab all the surfaceIds and make them available------------------------------------------------------------------------------------------------Surface_Adj_Id_Match// List <string> spaceIds = new List <string>(); foreach (gbXMLSpaces s in spaces) { spaceIds.Add(s.id); } List <SurfaceDefinitions> surfaces = DOEgbXML.XMLParser.MakeSurfaceList(myxml, nsm); //make sure the surface Adjacent space Id names match only the the space Ids gathered above. The adjacent space Ids can't have their own special values report.testType = TestType.Surface_Adj_Id_Match; report = DOEgbXML.SurfaceDefinitions.SurfaceAdjSpaceIdTest(spaceIds, surfaces, report); ProcessReport(report, true); report.Clear(); //Surface_ID_SB_Match------------------------------------------------------------------------------------------------------------------------------Surface_ID_SB_Match// if (spaceBoundsPresent) { report.tolerance = DOEgbXMLBasics.Tolerances.coordToleranceIP; report.testType = TestType.Surface_ID_SB_Match; report = SurfaceDefinitions.SurfaceMatchesSpaceBoundary(myxml, nsm, report); ProcessReport(report, true); report.Clear(); } else { report.testType = TestType.Surface_ID_SB_Match; report.passOrFail = true; report.longMsg = "A test is usually performed here to ensure Space Boundaries and Surfaces share the same ID. This test was skipped (legally) because your file does not have space boundaries present. Continuing to next test."; ProcessReport(report, true); report.Clear(); } //Does the polyloop right hand rule vector form the proper azimuth and tilt? (with and without a CADModelAzimuth)----------------------------------Surface_Tilt_Az_Check// report.tolerance = DOEgbXMLBasics.Tolerances.VectorAngleTolerance; report.vectorangletol = DOEgbXMLBasics.Tolerances.VectorAngleTolerance; report.testType = TestType.Surface_Tilt_Az_Check; report = SurfaceDefinitions.SurfaceTiltAndAzCheck(myxml, nsm, report); ProcessReport(report, true); report.Clear(); //planar surface test-------------------------------------------------------------------------------------------------------------------------------Surface_Planar_Test// report.vectorangletol = DOEgbXMLBasics.Tolerances.VectorAngleTolerance; report = SurfaceDefinitions.TestSurfacePlanarTest(surfaces, report); report.testType = TestType.Surface_Planar_Test; ProcessReport(report, true); report.Clear(); //I must take the surfaces, group them, and rearrange any interior surfaces' coordinates that should be pointed the opposite way string searchpath = "/gbXMLv5:gbXML/gbXMLv5:Campus/gbXMLv5:Building/gbXMLv5:Space"; List <string> spaceids = DOEgbXML.gbXMLSpaces.getSpaceIds(myxml, nsm, searchpath); Dictionary <string, List <SurfaceDefinitions> > enclosure = new Dictionary <string, List <SurfaceDefinitions> >(); foreach (string id in spaceids) { //find all surfaces with this adjacent space id, get their polyloops, and then match their polyloops List <SurfaceDefinitions> surflist = new List <SurfaceDefinitions>(); foreach (SurfaceDefinitions surf in surfaces) { foreach (var adj in surf.AdjSpaceId) { if (adj == id) { surflist.Add(surf); //don't want to add surfaces twice (slab on grade) break; } } } enclosure[id] = surflist; } //counter clockwise winding test-------------------------------------------------------------------------------------------------------------------------Surface_CC_Test// report.testType = TestType.Surface_CC_Test; report = SurfaceDefinitions.SurfaceCCTest(enclosure, report); ProcessReport(report, true); report.Clear(); //self intersecting polygon test //report = SurfaceDefinitions.SurfaceSelfIntersectionTest(surfaces, report); //report.Clear(); //Is the Lower Left Corner properly defined? //surface enclosure tests------------------------------------------------------------------------------------------------------------------------Check_Surface_Enclosure// report.tolerance = 0.0001; report.vectorangletol = DOEgbXMLBasics.Tolerances.dotproducttol; report.lengthtol = DOEgbXMLBasics.Tolerances.lengthTolerance; report.coordtol = .01; report.testType = TestType.Check_Surface_Enclosure; report = Validator.CheckSurfaceEnclosure(enclosure, report); ProcessReport(report, true); report.Clear(); TestResultPanel.Controls.Add(new LiteralControl("</table></div>")); CreateSummaryTable(); }