protected string CreateFormattedVectorDeclaration(ClassElement var)
        {
            if (var.CustomType == null)
            {
                return(String.Format("{0}_VECTOR", var.Type));
            }
            string[] cParts             = var.CustomType.Split("::".ToCharArray());
            string   cName              = cParts[cParts.Length - 1];
            string   collectionTypeDecl = String.Format("{0}_VECTOR", cName);

            return(collectionTypeDecl);
        }
Esempio n. 2
0
        void GetComplexTypeAttributes(XmlSchemaComplexType complexType, Dictionary <String, List <ClassElement> > classesToGenerateMap, Dictionary <String, List <EnumElement> > enumsToGenerateMap, string namespaceName)
        {
            try
            {
                if (false == classesToGenerateMap.ContainsKey(complexType.Name))
                {
                    classesToGenerateMap.Add(complexType.Name, new List <ClassElement>());
                    _classNames.Add(complexType.Name);
                }

                if (complexType.AttributeUses.Count > 0)
                {
                    IDictionaryEnumerator enumerator =
                        complexType.AttributeUses.GetEnumerator();

                    while (enumerator.MoveNext())
                    {
                        XmlSchemaAttribute attribute = (XmlSchemaAttribute)enumerator.Value;

                        ClassElement pe = new ClassElement(attribute.Name, attribute.AttributeSchemaType.TypeCode);
                        pe.Namespace = GetNamespaceFromXsd(complexType.Parent as XmlSchema);;



                        XmlSchemaSimpleTypeRestriction restriction = (XmlSchemaSimpleTypeRestriction)attribute.AttributeSchemaType.Content;

                        if ((attribute.Annotation != null) && (attribute.Annotation.Items.Count > 0))
                        {
                            XmlSchemaDocumentation doc = (XmlSchemaDocumentation)attribute.Annotation.Items[0];
                            if (null != doc)
                            {
                                pe.Comment = "//" + doc.Markup[0].Value;
                            }
                        }

                        ExtractEnumDefinition(attribute.AttributeSchemaType.Name, restriction, enumsToGenerateMap, ref pe, namespaceName);

                        classesToGenerateMap[complexType.Name].Add(pe);
                    }
                }
            }
            catch (Exception x)
            {
                Console.WriteLine("File Name = '{0}' , Message = '{1}'", _fileUnderProcessing, x.ToString());
            }
        }
        protected String AppendCaretIfRequired(ClassElement element, String str)
        {
            if (_targetLanguage == TargetLanguage.CPP_CLI)
            {
                String caret = "";
                switch (element.Type)
                {
                case XmlTypeCode.AnyAtomicType:
                    break;

                case XmlTypeCode.AnyUri:
                    break;

                case XmlTypeCode.Attribute:
                    break;

                case XmlTypeCode.Base64Binary:
                    break;

                case XmlTypeCode.Boolean:
                    break;

                case XmlTypeCode.Byte:
                    break;

                case XmlTypeCode.Comment:
                    break;

                case XmlTypeCode.Date:
                    caret = "^";
                    break;

                case XmlTypeCode.DateTime:
                    caret = "^";
                    break;

                case XmlTypeCode.DayTimeDuration:
                    break;

                case XmlTypeCode.Decimal:
                    break;

                case XmlTypeCode.Document:
                    break;

                case XmlTypeCode.Double:
                    break;

                case XmlTypeCode.Duration:
                    break;

                case XmlTypeCode.Element:
                    break;

                case XmlTypeCode.Entity:
                    break;

                case XmlTypeCode.Float:
                    break;

                case XmlTypeCode.GDay:
                    break;

                case XmlTypeCode.GMonth:
                    break;

                case XmlTypeCode.GMonthDay:
                    break;

                case XmlTypeCode.GYear:
                    break;

                case XmlTypeCode.GYearMonth:
                    break;

                case XmlTypeCode.HexBinary:
                    break;

                case XmlTypeCode.Id:
                    break;

                case XmlTypeCode.Idref:
                    caret = "^";
                    break;

                case XmlTypeCode.Int:
                    break;

                case XmlTypeCode.Integer:
                    break;

                case XmlTypeCode.Item:
                    break;

                case XmlTypeCode.Language:
                    break;

                case XmlTypeCode.Long:
                    break;

                case XmlTypeCode.NCName:
                    break;

                case XmlTypeCode.Name:
                    break;

                case XmlTypeCode.Namespace:
                    break;

                case XmlTypeCode.NegativeInteger:
                    break;

                case XmlTypeCode.NmToken:
                    break;

                case XmlTypeCode.Node:
                    break;

                case XmlTypeCode.NonNegativeInteger:
                    break;

                case XmlTypeCode.NonPositiveInteger:
                    break;

                case XmlTypeCode.None:
                    break;

                case XmlTypeCode.NormalizedString:
                    break;

                case XmlTypeCode.Notation:
                    break;

                case XmlTypeCode.PositiveInteger:
                    break;

                case XmlTypeCode.ProcessingInstruction:
                    break;

                case XmlTypeCode.QName:
                    break;

                case XmlTypeCode.Short:
                    break;

                case XmlTypeCode.String:
                    caret = "^";
                    break;

                case XmlTypeCode.Text:
                    break;

                case XmlTypeCode.Time:
                    break;

                case XmlTypeCode.Token:
                    break;

                case XmlTypeCode.UnsignedByte:
                    break;

                case XmlTypeCode.UnsignedInt:
                    break;

                case XmlTypeCode.UnsignedLong:
                    break;

                case XmlTypeCode.UnsignedShort:
                    break;

                case XmlTypeCode.UntypedAtomic:
                    break;

                case XmlTypeCode.YearMonthDuration:
                    break;

                default:
                    break;
                }
                str += caret;
            }
            return(str);
        }
        protected string XSDToCppType(ClassElement element)
        {
            string retVal = string.Empty;

            switch (element.Type)
            {
            case XmlTypeCode.Float:
                retVal = "double"; break;

            case XmlTypeCode.Short:
                switch (_targetLanguage)
                {
                case TargetLanguage.CSharp:
                    retVal = "Int16"; break;

                default:
                    retVal = "int"; break;
                }
                break;

            case XmlTypeCode.Byte:
                retVal = "byte"; break;

            case XmlTypeCode.String:
                switch (_targetLanguage)
                {
                case TargetLanguage.CPP:
                    retVal = "tstring"; break;

                case TargetLanguage.CPP_CLI:
                    retVal = "String"; break;

                case TargetLanguage.CSharp:
                    retVal = "string"; break;

                default:
                    retVal = "tstring"; break;
                }
                break;

            case XmlTypeCode.Long:
                retVal = "long"; break;

            case XmlTypeCode.Double:
                retVal = "double"; break;

            case XmlTypeCode.Decimal:
                switch (_targetLanguage)
                {
                case TargetLanguage.CPP:
                    retVal = "double"; break;

                case TargetLanguage.CPP_CLI:
                    retVal = "System::Decimal"; break;

                case TargetLanguage.CSharp:
                    retVal = "System.Decimal"; break;

                default:
                    retVal = "double"; break;
                }
                break;

            case XmlTypeCode.Int:
            case XmlTypeCode.Integer:
            case XmlTypeCode.PositiveInteger:
            case XmlTypeCode.NegativeInteger:
                retVal = "int"; break;

            case XmlTypeCode.Boolean:
                retVal = "bool"; break;

            case XmlTypeCode.Element:
                retVal = element.CustomType; break;

            case XmlTypeCode.DateTime:
            case XmlTypeCode.Date:
                retVal = _targetLanguage == TargetLanguage.CPP ? "void" : "System" + NamespaceToken + "DateTime"; break;

            default:
                retVal = _targetLanguage == TargetLanguage.CPP ? "void" : "Object"; break;
            }


            return(AppendCaretIfRequired(element, retVal));
        }
        protected string GetDefaultsString(ClassElement e, Dictionary <String, List <EnumElement> > enumsToGenerateMap)
        {
            string      retString = "";
            XmlTypeCode type      = e.Type;

            if (e.IsEnum)
            {
                string nspace = string.Empty;
                retString = enumsToGenerateMap[e.CustomType][0].Name;
                nspace    = enumsToGenerateMap[e.CustomType][0].NameSpace;

                if (_targetLanguage == TargetLanguage.CSharp || _targetLanguage == TargetLanguage.JAVA)
                {
                    return(nspace + "." + retString);
                }
                else
                {
                    return(nspace + "::" + retString);
                }
            }
            switch (type)
            {
            case XmlTypeCode.AnyAtomicType:
                break;

            case XmlTypeCode.AnyUri:
                break;

            case XmlTypeCode.Attribute:
                break;

            case XmlTypeCode.Base64Binary:
                break;

            case XmlTypeCode.Boolean: retString = "false";
                break;

            case XmlTypeCode.Byte: retString = "0";
                break;

            case XmlTypeCode.Comment:
                break;

            case XmlTypeCode.Date:
                break;

            case XmlTypeCode.DateTime:
                break;

            case XmlTypeCode.DayTimeDuration:
                break;

            case XmlTypeCode.Decimal:
                switch (_targetLanguage)
                {
                case TargetLanguage.CSharp:
                    retString = "default(decimal)"; break;

                case TargetLanguage.CPP_CLI:
                    retString = "0"; break;

                default:
                    retString = "0.0"; break;
                }
                break;

            case XmlTypeCode.Document:
                break;

            case XmlTypeCode.Double:
                switch (_targetLanguage)
                {
                case TargetLanguage.CSharp:
                    retString = "default(double)"; break;

                default:
                    retString = "0.0"; break;
                }
                break;

            case XmlTypeCode.Duration:
                break;

            case XmlTypeCode.Element:
                break;

            case XmlTypeCode.Entity:
                break;

            case XmlTypeCode.Float: retString = "0.0";
                break;

            case XmlTypeCode.GDay:
                break;

            case XmlTypeCode.GMonth:
                break;

            case XmlTypeCode.GMonthDay:
                break;

            case XmlTypeCode.GYear:
                break;

            case XmlTypeCode.GYearMonth:
                break;

            case XmlTypeCode.HexBinary: retString = "0";
                break;

            case XmlTypeCode.Id:
                break;

            case XmlTypeCode.Idref:
                break;

            case XmlTypeCode.Int: retString = "0";
                break;

            case XmlTypeCode.Integer: retString = "0";
                break;

            case XmlTypeCode.Item:
                break;

            case XmlTypeCode.Language:
                break;

            case XmlTypeCode.Long: retString = "0";
                break;

            case XmlTypeCode.NCName:
                break;

            case XmlTypeCode.Name:
                break;

            case XmlTypeCode.Namespace:
                break;

            case XmlTypeCode.NegativeInteger: retString = "0";
                break;

            case XmlTypeCode.NmToken:
                break;

            case XmlTypeCode.Node:
                break;

            case XmlTypeCode.NonNegativeInteger: retString = "0";
                break;

            case XmlTypeCode.NonPositiveInteger: retString = "0";
                break;

            case XmlTypeCode.None:
                break;

            case XmlTypeCode.NormalizedString:
                break;

            case XmlTypeCode.Notation:
                break;

            case XmlTypeCode.PositiveInteger: retString = "0";
                break;

            case XmlTypeCode.ProcessingInstruction:
                break;

            case XmlTypeCode.QName:
                break;

            case XmlTypeCode.Short: retString = "0";
                switch (_targetLanguage)
                {
                case TargetLanguage.CSharp:
                    retString = "default(Int16)"; break;

                default:
                    retString = "0"; break;
                }
                break;

            case XmlTypeCode.String: retString = "";
                break;

            case XmlTypeCode.Text: retString = "";
                break;

            case XmlTypeCode.Time:
                break;

            case XmlTypeCode.Token:
                break;

            case XmlTypeCode.UnsignedByte: retString = "0";
                break;

            case XmlTypeCode.UnsignedInt: retString = "0";
                break;

            case XmlTypeCode.UnsignedLong: retString = "0";
                break;

            case XmlTypeCode.UnsignedShort: retString = "0";
                break;

            case XmlTypeCode.UntypedAtomic:
                break;

            case XmlTypeCode.YearMonthDuration:
                break;

            default:
                break;
            }

            return(retString);
        }
Esempio n. 6
0
        void ExtractEnumDefinition(string typeName, XmlSchemaSimpleTypeRestriction restriction, Dictionary <String, List <EnumElement> > enumsToGenerateMap, ref ClassElement pe, string nameSpace)
        {
            if (null != restriction)
            {
                foreach (XmlSchemaEnumerationFacet fac in restriction.Facets)
                {
                    XmlSchema xsd = restriction.Parent.Parent as XmlSchema;

                    nameSpace = GetNamespaceFromXsd(xsd);
                    String      enName  = String.Empty;
                    EnumElement enm     = null;
                    String      enValue = String.Empty;
                    bool        valueExceedsIntRange = false;

                    if (null != fac)
                    {
                        XmlSchemaDocumentation doc = (XmlSchemaDocumentation)fac.Annotation.Items[0];
                        enValue = fac.Value;

                        try
                        {
                            if (long.Parse(enValue.Replace("0x", ""), System.Globalization.NumberStyles.AllowHexSpecifier) > int.MaxValue)
                            {
                                valueExceedsIntRange = true;
                            }
                        }
                        catch (Exception) { }


                        if (null != doc)
                        {
                            enName = doc.Markup[0].Value;
                            switch (_targetLanguage)
                            {
                            case TargetLanguage.CSharp:
                            case TargetLanguage.JAVA:
                                enName = typeName + "." + enName;
                                break;

                            case TargetLanguage.CPP_CLI:
                                enName = typeName + "::" + enName;
                                break;
                            }
                        }

                        enm = new EnumElement(enName, enValue);

                        //AppendNameSpace(ref typeName, nameSpace);
                        if (false == enumsToGenerateMap.ContainsKey(typeName))
                        {
                            enumsToGenerateMap.Add(typeName, new List <EnumElement>());
                        }

                        pe.IsEnum     = true;
                        pe.CustomType = typeName;
                        pe.Type       = XmlTypeCode.Element;


                        enm.ValueExceedsIntRange = valueExceedsIntRange;

                        bool enumMemberExists = false;
                        foreach (EnumElement var in enumsToGenerateMap[typeName])
                        {
                            if (var.Name == enName)
                            {
                                enumMemberExists = true;
                                break;
                            }
                        }

                        //if (_targetLanguage == TargetLanguage.JAVA)
                        //     enm.NameSpace = nameSpace + "." + xsd.Id;
                        // else
                        enm.NameSpace = nameSpace;

                        if (false == enumMemberExists)
                        {
                            enumsToGenerateMap[typeName].Add(enm);
                        }
                    }
                }
            }
        }
Esempio n. 7
0
        void IterateOverSchemaSequence(XmlSchemaObject schemaObject, Dictionary <String, List <ClassElement> > classesToGenerateMap, Dictionary <String, List <EnumElement> > enumsToGenerateMap, string namespaceName)
        {
            try
            {
                XmlSchemaElement element = schemaObject as XmlSchemaElement;
                if (element != null)
                {
                    return;
                }

                XmlSchemaComplexType complexType = schemaObject as XmlSchemaComplexType;
                if (complexType == null)
                {
                    return;
                }

                XmlSchemaSequence sequence = complexType.ContentTypeParticle as XmlSchemaSequence;
                if (null == sequence)
                {
                    GetComplexTypeAttributes(complexType, classesToGenerateMap, enumsToGenerateMap, namespaceName);
                    _classNamesNoNestedTypes.Add(complexType.Name);
                    return;
                }

                foreach (XmlSchemaElement childElement in sequence.Items)
                {
                    if (false == classesToGenerateMap.ContainsKey(complexType.Name))
                    {
                        _classNames.Add(complexType.Name);
                        classesToGenerateMap.Add(complexType.Name, new List <ClassElement>());
                        GetComplexTypeAttributes(complexType, classesToGenerateMap, enumsToGenerateMap, namespaceName);
                    }

                    ClassElement proxyElement = null;
                    if (null != childElement.ElementSchemaType.Name)//an element of custom complex types
                    {
                        if (false == classesToGenerateMap.ContainsKey(childElement.ElementSchemaType.Name))
                        {
                            IterateOverSchemaSequence(childElement, classesToGenerateMap, enumsToGenerateMap, namespaceName);
                        }

                        string customFQType = childElement.ElementSchemaType.Name;
                        if (_externalClassesnNamespaces.ContainsKey(customFQType))
                        {
                            AppendNameSpace(ref customFQType, _externalClassesnNamespaces[customFQType]);
                        }
                        proxyElement = new ClassElement(childElement.Name, customFQType);
                    }
                    else
                    {
                        proxyElement = new ClassElement(childElement.Name, childElement.ElementSchemaType.TypeCode);
                    }

                    if (null != childElement.MaxOccursString)//is collection
                    {
                        proxyElement.IsCollection = true;
                    }

                    if ((childElement.Annotation != null) && (childElement.Annotation.Items.Count > 0))
                    {
                        XmlSchemaDocumentation doc = (XmlSchemaDocumentation)childElement.Annotation.Items[0];
                        if (null != doc)
                        {
                            proxyElement.Comment = "//" + doc.Markup[0].Value;
                        }
                    }

                    proxyElement.Namespace = namespaceName;
                    classesToGenerateMap[complexType.Name].Add(proxyElement);
                }
            }
            catch (Exception x)
            {
                Console.WriteLine("File Name = '{0}' , Message = '{1}'", _fileUnderProcessing, x.ToString());
            }
        }