private static void SetAppInfoAndDataType(IPluglet pluglet, XmlSchemaElement element)
        {
            X12BaseDataType dataType = pluglet.DataType;

            if (dataType != null && !string.IsNullOrEmpty(dataType.Name))
            {
                XmlSchemaAppInfo appInfo = new XmlSchemaAppInfo();

                XmlDocument doc  = new XmlDocument();
                XmlElement  elem = doc.CreateElement("STD_Info");
                elem.SetAttribute("DataType", dataType.Name);

                if (!string.IsNullOrEmpty(pluglet.DEStandard))
                {
                    elem.SetAttribute("Name", pluglet.DEStandard);
                }

                if (!string.IsNullOrEmpty(pluglet.DENumber))
                {
                    elem.SetAttribute("Number", pluglet.DENumber);
                }

                if (dataType.MaxLength > 0)
                {
                    elem.SetAttribute("MaximumLength", dataType.MaxLength.ToString());
                }

                XmlNode[] nodeArray = new XmlNode[1] {
                    elem
                };
                appInfo.Markup = nodeArray;

                if (element.Annotation != null)
                {
                    element.Annotation.Items.Add(appInfo);
                }

                else
                {
                    XmlSchemaAnnotation annotation = new XmlSchemaAnnotation();
                    annotation.Items.Add(appInfo);
                    element.Annotation = annotation;
                }

                if (string.Equals(dataType.Name, X12DataTypeFactory.IDNew_DataTypeName, StringComparison.OrdinalIgnoreCase))
                {
                    PopulateEnumerationValues(pluglet.DataType as X12_IdDataType, element);
                }
            }
        }
Beispiel #2
0
        public static X12BaseDataType CreateX12DataTypeFromXmlSchema2(XmlSchemaElement element, bool bDesignTime)
        {
            string          dataTypeName;
            X12BaseDataType dataType = null;
            XmlSchemaSimpleTypeRestriction restriction = null;
            int minL, maxL;

            minL = maxL = -1;
            Dictionary <string, string> sortedList = null;

            if (element.ElementType is XmlSchemaSimpleType)
            {
                XmlSchemaSimpleType sType = (XmlSchemaSimpleType)element.ElementType;
                XmlQualifiedName    name  = sType.QualifiedName;
                dataTypeName = sType.Name;

                restriction = sType.Content as XmlSchemaSimpleTypeRestriction;
                if (restriction != null)
                {
                    dataTypeName = name.Name != null && name.Name.StartsWith(ID_DataTypeName, StringComparison.Ordinal)
                        ? ID_DataTypeName : restriction.BaseTypeName.Name;
                    sortedList = DataTypeHelper.RetrieveFacets(restriction, out minL, out maxL);
                }
                //Console.WriteLine("Element name = " + element.Name + " SimpleType name = " + dataTypeName);
            }

            else
            {
                XmlSchemaDatatype dType = (XmlSchemaDatatype)element.ElementType;
                dataTypeName = dType.ValueType.ToString();
                //Console.WriteLine("Element name = " + element.Name + " DataType name = " + dType.ValueType);
            }

            switch (dataTypeName.ToUpper())
            {
            case R_DataTypeName:
                dataType = new X12_RDataType(R_DataTypeName, minL, maxL);
                break;

            case "STRING":
            case "SYSTEM.STRING":
            case EFACT_A_DataTypeName:
            case EFACT_AN_DataTypeName:
            case AN_DataTypeName:
                dataType = new X12_AnDataType(AN_DataTypeName, minL, maxL);
                break;

            case ID_DataTypeName:
                dataType = new X12_IdDataType(ID_DataTypeName, sortedList);
                break;

            case Date_DataTypeName:
                dataType = new X12_DtDataType(Date_DataTypeName, minL, maxL);
                break;

            case Time_DataTypeName:
                dataType = new X12_TmDataType(Time_DataTypeName, minL, maxL);
                break;

            case EFACT_N_DataTypeName:
            case N_DataTypeName:
                dataType = X12_NDataType.GetDataTypeWithPrecision(0, minL, maxL);
                break;

            default:
                if (dataTypeName.Length == 6 && dataTypeName.StartsWith("X12_N", StringComparison.Ordinal) &&
                    dataTypeName[5] >= '0' && dataTypeName[5] <= '9')
                {
                    dataType = X12_NDataType.GetDataTypeWithPrecision(dataTypeName[5] - '0',
                                                                      minL, maxL);
                }

                else
                {
                    //throw new Exception(string.Format("{0} data type is not supported", dataTypeName));
                    dataType = new X12_AnDataType(AN_DataTypeName, -1, -1);
                }

                break;
            }

            return(dataType);
        }