private static void FixEnumerationSelect(SchemaModel model, DomainStructure namespaces) { // predefined type is defined as a select between two enumerations. We implement selects as interfaces and enumerations // in C# can not implement interfaces var transportElement = model.Get <EntityDefinition>(e => e.Name == "IfcTransportElement").First(); var transportElementType = model.Get <EntityDefinition>(e => e.Name == "IfcTransportElementType").First(); var predefinedType = transportElement.Attributes.First(a => a.Name == "PredefinedType") as ExplicitAttribute; var typePredefinedType = transportElementType.Attributes.First(a => a.Name == "PredefinedType") as ExplicitAttribute; var select = predefinedType.Domain as SelectType; var enums = select.Selections.OfType <EnumerationType>().ToList(); var ns = namespaces.Domains.FirstOrDefault(d => d.Types.Any(t => t == enums[0].Name)); var singleEnum = model.New <EnumerationType>(transportElement.ParentSchema, e => { e.Name = "IfcTransportElementTypeEnum"; e.PersistanceName = e.Name; e.TypeId = model.LastTypeId + 1; e.Elements = new List <ExpressId>( enums.SelectMany(en => en.Elements).Distinct() ); }); predefinedType.Domain = singleEnum; typePredefinedType.Domain = singleEnum; ns.Types.Add(singleEnum.Name); // remove select and enumerations not used model.Remove(select); enums.ForEach(e => model.Remove(e)); }
private static void EnhanceNullStyleInIfc(SchemaModel model, DomainStructure structure) { var nullStyle = model.Get <EnumerationType>(n => n.Name == "IfcNullStyle").FirstOrDefault(); if (nullStyle == null) { return; } nullStyle.Name = "IfcNullStyleEnum"; nullStyle.PersistanceName = "IfcNullStyleEnum"; var defType = model.New <DefinedType>(nullStyle.ParentSchema, d => { d.Name = "IfcNullStyle"; d.PersistanceName = "IfcNullStyle"; d.Domain = nullStyle; }); var selects = model.Get <SelectType>(s => s.Selections.Contains(nullStyle)); foreach (var @select in selects) { select.Selections.Remove(nullStyle); select.Selections.Add(defType); } //adjust namespace var domain = structure.GetDomainForType("IfcNullStyle"); domain.Types.Add("IfcNullStyleEnum"); }
public void SchemaCreation() { var model = new SchemaModel {Schema = {Name = "Sample Schema", Identification = "SAMPLE_TEST"}}; var definedType = model.New((DefinedType t) => { t.Name = "Identifier"; t.Domain = model.PredefinedSimpleTypes.StringType; }); var entity = model.New((EntityDefinition e) => { e.Name = "Model"; }); entity.AddAttribute(model.New((ExplicitAttribute a) => { a.Name = "Name"; a.Domain = definedType; })); entity.AddAttribute(model.New((ExplicitAttribute a) => { a.Name = "Description"; a.Domain = model.PredefinedSimpleTypes.StringType; })); }