Ejemplo n.º 1
0
        /// <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();
        }
Ejemplo n.º 2
0
        /// <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());
        }