public void RemoveUnrequiredAssetsFromSubmission() { var submitted = Facility.ReadJson("Lakeside_restaurant.json"); Assert.IsNotNull(submitted.AssetTypes); var requirement = Facility.ReadJson("Lakeside_Restaurant-stage6-COBie.json"); requirement.WriteXml(@"Lakeside_Restaurant-stage6-COBie.xml"); Assert.IsNotNull(requirement.AssetTypes); var submittedAssetTypes = new List <AssetType>(); foreach (var assetTypeRequirement in requirement.AssetTypes) { var v = new CobieObjectValidator <AssetType, Asset>(assetTypeRequirement) { TerminationMode = TerminationMode.StopOnFirstFail }; var candidates = v.GetCandidates(submitted.AssetTypes).ToList(); submittedAssetTypes.AddRange(candidates.Select(c => c.MatchedObject).Cast <AssetType>()); } Assert.IsTrue(submittedAssetTypes.Count > 0); submitted.AssetTypes = submittedAssetTypes; string msg; submitted.WriteCobie("Lakeside_restaurant_submission.xlsx", out msg); Assert.IsTrue(string.IsNullOrWhiteSpace(msg)); }
/// <returns>true if it has failures</returns> private bool ValidateAssetTypes(Facility requirement, Facility submitted, Facility retFacility) { if (requirement.AssetTypes == null) return true; var ret = false; foreach (var assetTypeRequirement in requirement.AssetTypes) { var v = new CobieObjectValidator<AssetType, Asset>(assetTypeRequirement) { TerminationMode = TerminationMode }; if (! v.HasRequirements) continue; var candidates = v.GetCandidates(submitted.AssetTypes).ToList(); if (candidates.Any()) { foreach (var candidate in candidates) { if (retFacility.AssetTypes == null) retFacility.AssetTypes = new List<AssetType>(); retFacility.AssetTypes.Add(v.Validate(candidate, retFacility)); } } else { if (retFacility.AssetTypes == null) retFacility.AssetTypes = new List<AssetType>(); retFacility.AssetTypes.Add(v.Validate((AssetType) null, retFacility)); } ret |= v.HasFailures; } return ret; }
/// <returns>true if it has failures</returns> private bool ValidateZones(Facility requirement, Facility submitted, Facility retFacility) { if (requirement.Zones == null) return false; var ret = false; // hack: create a fake modelFacility candidates from spaces. var fakeSubmittedFacility = new Facility(); fakeSubmittedFacility.Floors = fakeSubmittedFacility.Clone(submitted.Floors as IEnumerable<Floor>).ToList(); fakeSubmittedFacility.Zones = new List<Zone>(); var lSpaces = submitted.Get<Space>().ToList(); foreach (var zoneRequirement in requirement.Zones) { var v = new CobieObjectValidator<Zone, Space>(zoneRequirement) { TerminationMode = TerminationMode }; if (! v.HasRequirements) continue; // hack: now create a fake Zone based on candidates from spaces. var fakeZone = fakeSubmittedFacility.Create<Zone>(); fakeZone.Categories = zoneRequirement.Categories.Clone().ToList(); fakeZone.Name = zoneRequirement.Name; fakeZone.ExternalEntity = zoneRequirement.ExternalEntity; fakeZone.ExternalSystem = zoneRequirement.ExternalSystem; fakeZone.ExternalId = zoneRequirement.ExternalId; fakeZone.Spaces = new List<SpaceKey>(); var candidateSpaces = v.GetCandidates(lSpaces).ToList(); if (candidateSpaces.Any()) { foreach (var spaceMatch in candidateSpaces) { var mSpace = spaceMatch.MatchedObject as Space; if (mSpace == null) continue; var sk = new SpaceKey {Name = mSpace.Name}; fakeZone.Spaces.Add(sk); } if (retFacility.Zones == null) retFacility.Zones = new List<Zone>(); var validatedZone = v.Validate(fakeZone, retFacility); retFacility.Zones.Add(validatedZone); var tmpFloor = retFacility.Get<Floor>(fl => fl.Name == TemporaryFloorName).FirstOrDefault(); if (tmpFloor == null) continue; // ensure that the floor and spaces are avalialale in the report facility foreach (var spaceKey in validatedZone.Spaces) { // 1) on the floor var submissionOwningFloor = submitted.Get<Floor>(f => f.Spaces != null && f.Spaces.Any(sp => sp.Name == spaceKey.Name)).FirstOrDefault(); if (submissionOwningFloor == null) continue; var destFloor = retFacility.Get<Floor>(f => f.Name == submissionOwningFloor.Name).FirstOrDefault(); if (destFloor == null) { destFloor = retFacility.Create<Floor>(); destFloor.Name = submissionOwningFloor.Name; destFloor.ExternalEntity = submissionOwningFloor.ExternalEntity; destFloor.ExternalId = submissionOwningFloor.ExternalId; destFloor.ExternalSystem = submissionOwningFloor.ExternalSystem; destFloor.Elevation = submissionOwningFloor.Elevation; destFloor.Spaces = new List<Space>(); retFacility.Floors.Add(destFloor); // finally add it in the facility tree } // 2) now on the space. var sourceSpace = tmpFloor.Spaces.FirstOrDefault(sp => sp.Name == spaceKey.Name); if (sourceSpace != null) { destFloor.Spaces.Add(sourceSpace); } } retFacility.Floors.Remove(tmpFloor); } else { if (retFacility.Zones == null) retFacility.Zones = new List<Zone>(); retFacility.Zones.Add(v.Validate((Zone) null, retFacility)); } ret |= v.HasFailures; } return ret; }
public void RemoveUnrequiredAssetsFromSubmission() { var submitted = Facility.ReadJson("Lakeside_restaurant.json"); Assert.IsNotNull(submitted.AssetTypes); var requirement = Facility.ReadJson("Lakeside_Restaurant-stage6-COBie.json"); Assert.IsNotNull(requirement.AssetTypes); var submittedAssetTypes = new List<AssetType>(); foreach (var assetTypeRequirement in requirement.AssetTypes) { var v = new CobieObjectValidator<AssetType, Asset>(assetTypeRequirement) { TerminationMode = TerminationMode.StopOnFirstFail }; var candidates = v.GetCandidates(submitted.AssetTypes).ToList(); submittedAssetTypes.AddRange(candidates.Select(c => c.MatchedObject).Cast<AssetType>()); } Assert.IsTrue(submittedAssetTypes.Count > 0); submitted.AssetTypes = submittedAssetTypes; string msg; submitted.WriteCobie("Lakeside_restaurant_submission.xlsx", out msg); Assert.IsTrue(string.IsNullOrWhiteSpace(msg)); }