/// <summary> /// Get overridden setters /// </summary> public static SetterOverrideData[] GetOverrideSetters(TypeReference tr, Property p, string ownerPackage) { // Not a datatype so we won't need overrides if(tr.Class != null) return new SetterOverrideData[0]; // Get all the setter overrides var dataType = s_heuristicData.Datatypes.Find(o => o.MifDatatype == tr.Name); // Sanity check if(dataType == null || dataType.SetterOverride.Count == 0) return new SetterOverrideData[0]; // Set generic paramaters Dictionary<String, String> bind = new Dictionary<string, string>(); string fillParameter = dataType.TemplateParameter; if (!String.IsNullOrEmpty(dataType.TemplateParameter)) { int i = 0; foreach (string s in dataType.TemplateParameter.Split(',')) { TypeReference bindTypeRef = null; if (tr.GenericSupplier != null) // Generic Supplier { bindTypeRef = tr.GenericSupplier.Find(o => o is TypeParameter && (o as TypeParameter).ParameterName == s); if (bindTypeRef == null) bindTypeRef = tr.GenericSupplier[i++]; } else if (p != null && p.SupplierDomain != null && !String.IsNullOrEmpty(EnumerationRenderer.WillRender(p.SupplierDomain))) { string vocabName = Util.Util.MakeFriendly(EnumerationRenderer.WillRender(p.SupplierDomain)); string containerName = p.Container is Choice ? (p.Container as Choice).Container.Name : p.Container.Name; if(vocabName.Equals(containerName)) vocabName = String.Format("{0}.vocabulary.{1}", ownerPackage, vocabName); bindTypeRef = new TypeReference() { Name = String.Format("{0}", vocabName) }; } else bindTypeRef = new TypeReference() { Name = dataType.DefaultBind }; // Add Binding bind.Add(s, ClassRenderer.CreateDatatypeRef(bindTypeRef ?? new TypeReference() { Name = null }, null, ownerPackage)); fillParameter = fillParameter.Replace(s, bind[s]); } } // Create setter override and return List<SetterOverrideData> overrides = new List<SetterOverrideData>(dataType.SetterOverride.Count); foreach (var sod in dataType.SetterOverride) { // Correct parameters SetterOverrideData templatedSod = new SetterOverrideData(); templatedSod.Parameters = new List<PropertyInfoData>(); foreach (var parameterData in sod.Parameters) { string dt = String.Empty; if (!bind.TryGetValue(parameterData.DataType, out dt)) dt = parameterData.DataType; templatedSod.Parameters.Add(new PropertyInfoData() { Name = parameterData.Name, DataType = dt.Replace(string.Format("<{0}>", dataType.TemplateParameter), String.Format("<{0}>", fillParameter)) }); } // Correct Body templatedSod.Throws = new List<ThrowsData>(sod.Throws); templatedSod.SetterText = sod.SetterText.Replace(string.Format("<{0}>", dataType.TemplateParameter), String.Format("<{0}>", fillParameter)); templatedSod.ValueInstance = sod.ValueInstance; overrides.Add(templatedSod); } return overrides.ToArray(); }
/// <summary> /// Get overridden setters /// </summary> public static SetterOverrideData[] GetOverrideSetters(TypeReference tr, Property p, string ownerPackage) { // Not a datatype so we won't need overrides if (tr.Class != null) { return(new SetterOverrideData[0]); } // Get all the setter overrides var dataType = s_heuristicData.Datatypes.Find(o => o.MifDatatype == tr.Name); // Sanity check if (dataType == null || dataType.SetterOverride.Count == 0) { return(new SetterOverrideData[0]); } // Set generic paramaters Dictionary <String, String> bind = new Dictionary <string, string>(); string fillParameter = dataType.TemplateParameter; if (!String.IsNullOrEmpty(dataType.TemplateParameter)) { int i = 0; foreach (string s in dataType.TemplateParameter.Split(',')) { TypeReference bindTypeRef = null; if (tr.GenericSupplier != null) // Generic Supplier { bindTypeRef = tr.GenericSupplier.Find(o => o is TypeParameter && (o as TypeParameter).ParameterName == s); if (bindTypeRef == null) { bindTypeRef = tr.GenericSupplier[i++]; } } else if (p != null && p.SupplierDomain != null && !String.IsNullOrEmpty(EnumerationRenderer.WillRender(p.SupplierDomain))) { string vocabName = Util.Util.MakeFriendly(EnumerationRenderer.WillRender(p.SupplierDomain)); string containerName = p.Container is Choice ? (p.Container as Choice).Container.Name : p.Container.Name; if (vocabName.Equals(containerName)) { vocabName = String.Format("{0}.vocabulary.{1}", ownerPackage, vocabName); } bindTypeRef = new TypeReference() { Name = String.Format("{0}", vocabName) }; } else { bindTypeRef = new TypeReference() { Name = dataType.DefaultBind } }; // Add Binding bind.Add(s, ClassRenderer.CreateDatatypeRef(bindTypeRef ?? new TypeReference() { Name = null }, null, ownerPackage)); fillParameter = fillParameter.Replace(s, bind[s]); } } // Create setter override and return List <SetterOverrideData> overrides = new List <SetterOverrideData>(dataType.SetterOverride.Count); foreach (var sod in dataType.SetterOverride) { // Correct parameters SetterOverrideData templatedSod = new SetterOverrideData(); templatedSod.Parameters = new List <PropertyInfoData>(); foreach (var parameterData in sod.Parameters) { string dt = String.Empty; if (!bind.TryGetValue(parameterData.DataType, out dt)) { dt = parameterData.DataType; } templatedSod.Parameters.Add(new PropertyInfoData() { Name = parameterData.Name, DataType = dt.Replace(string.Format("<{0}>", dataType.TemplateParameter), String.Format("<{0}>", fillParameter)) }); } // Correct Body templatedSod.Throws = new List <ThrowsData>(sod.Throws); templatedSod.SetterText = sod.SetterText.Replace(string.Format("<{0}>", dataType.TemplateParameter), String.Format("<{0}>", fillParameter)); templatedSod.ValueInstance = sod.ValueInstance; overrides.Add(templatedSod); } return(overrides.ToArray()); }