/// <summary> /// Add filter for a role, used by ApplyRoleFilters for none default filters /// </summary> /// <param name="role">RoleFilter, single flag RoleFilter</param> /// <param name="filter">OutPutFilters to assign to role</param> /// <remarks>Does not apply filter to this object, used ApplyRoleFilters after setting the RolesFilterHolder items </remarks> public void AddRoleFilterHolderItem(RoleFilter role, OutputFilters filter) { if ((role & (role - 1)) != 0) { throw new ArgumentException("More than one flag set on role"); } RolesFilterHolder[role] = filter; }
/// <summary> /// Fill RolesFilterHolder with default values /// </summary> public void FillDefaultRolesFilterHolder() { foreach (RoleFilter role in Enum.GetValues(typeof(RoleFilter))) { string roleFile = role.ToResourceName(); if (!string.IsNullOrEmpty(roleFile)) { RolesFilterHolder[role] = new OutputFilters(roleFile, _log, role); } } }
/// <summary> /// Extension method to use default role configuration resource files /// </summary> /// <param name="roles">MergeRoles, Flag enum with one or more roles</param> /// <param name="append">true = add, false = overwrite existing </param> /// <param name="rolesFilter">Dictionary of roles to OutPutFilters to use for merge, overwrites current assigned dictionary</param> public void ApplyRoleFilters(RoleFilter roles, bool append = false, Dictionary <RoleFilter, OutputFilters> rolesFilter = null) { if (rolesFilter != null) { RolesFilterHolder = rolesFilter; } var init = append && !IsEmpty(); OutputFilters mergeFilter = null; foreach (RoleFilter role in Enum.GetValues(typeof(RoleFilter))) { if (!roles.HasFlag(role)) { continue; } if (RolesFilterHolder.ContainsKey(role)) { mergeFilter = RolesFilterHolder[role]; } else { // load defaults mergeFilter = GetDefaults(role, _log); RolesFilterHolder[role] = mergeFilter; } if (mergeFilter != null) { if (!init) { Copy(mergeFilter); //start a fresh init = true; //want to merge on next loop iteration } else { Merge(mergeFilter); } } mergeFilter = null; } //add the default property filters OutputFilters defaultPropFilters = new OutputFilters(null, _log, RoleFilter.Unknown, ImportSet.PropertyFilters); Merge(defaultPropFilters); //save the applied roles at end as this.Copy(mergeFilter) would set to first role in RoleFilter AppliedRoles = roles; }
/// <summary> /// Merge OutPutFilters /// </summary> /// <param name="mergeFilter">OutPutFilters</param> public void Merge(OutputFilters mergeFilter) { IfcProductFilter.MergeInc(mergeFilter.IfcProductFilter); IfcTypeObjectFilter.MergeInc(mergeFilter.IfcTypeObjectFilter); IfcAssemblyFilter.MergeInc(mergeFilter.IfcAssemblyFilter); ZoneFilter.Merge(mergeFilter.ZoneFilter); TypeFilter.Merge(mergeFilter.TypeFilter); SpaceFilter.Merge(mergeFilter.SpaceFilter); FloorFilter.Merge(mergeFilter.FloorFilter); FacilityFilter.Merge(mergeFilter.FacilityFilter); SpareFilter.Merge(mergeFilter.SpareFilter); ComponentFilter.Merge(mergeFilter.ComponentFilter); CommonFilter.Merge(mergeFilter.CommonFilter); }
/// <summary> /// Copy the OutPutFilters /// </summary> /// <param name="copyFilter">OutPutFilters to copy </param> public void Copy(OutputFilters copyFilter) { AppliedRoles = copyFilter.AppliedRoles; IfcProductFilter.Copy(copyFilter.IfcProductFilter); IfcTypeObjectFilter.Copy(copyFilter.IfcTypeObjectFilter); IfcAssemblyFilter.Copy(copyFilter.IfcAssemblyFilter); ZoneFilter.Copy(copyFilter.ZoneFilter); TypeFilter.Copy(copyFilter.TypeFilter); SpaceFilter.Copy(copyFilter.SpaceFilter); FloorFilter.Copy(copyFilter.FloorFilter); FacilityFilter.Copy(copyFilter.FacilityFilter); SpareFilter.Copy(copyFilter.SpareFilter); ComponentFilter.Copy(copyFilter.ComponentFilter); CommonFilter.Copy(copyFilter.CommonFilter); }
/// <summary> /// Set filters for Federated Model, referenced models /// </summary> /// <param name="modelRoleMap"></param> public Dictionary <T, OutputFilters> SetFedModelFilter <T>(Dictionary <T, RoleFilter> modelRoleMap) { Dictionary <T, OutputFilters> modelFilterMap = new Dictionary <T, OutputFilters>(); //save this filter before working out all fed models OutputFilters saveFilter = new OutputFilters(_log); saveFilter.Copy(this); foreach (var item in modelRoleMap) { ApplyRoleFilters(item.Value); OutputFilters roleFilter = new OutputFilters(_log); roleFilter.Copy(this); modelFilterMap.Add(item.Key, roleFilter); } Copy(saveFilter); //reset this filter back to state at top of function return(modelFilterMap); }
/// <summary> /// Fill FilterHolder From Directory, if no file use defaults config files in assembly /// </summary> /// <param name="dir">DirectoryInfo</param> public void FillRolesFilterHolderFromDir(DirectoryInfo dir) { if (!dir.Exists) { return; } foreach (RoleFilter role in Enum.GetValues(typeof(RoleFilter))) { var fileName = Path.Combine(dir.FullName, role + "Filters.xml"); var fileInfo = new FileInfo(fileName); if (fileInfo.Exists) { RolesFilterHolder[role] = DeserializeXml(fileInfo); } else { var roleFile = role.ToResourceName(); if (!string.IsNullOrEmpty(roleFile)) { RolesFilterHolder[role] = new OutputFilters(roleFile, _log, role); } } } }