/// <summary>
        /// Writes the import statements.
        /// </summary>
        private string LoadTemplate_Imports(Template template, Context context)
        {
            string namespaceUri = context.Target as string;

            if (namespaceUri == null)
            {
                return(null);
            }

            if (!m_exportAll)
            {
                template.WriteLine(String.Empty);
                template.Write(context.Prefix);

                if (namespaceUri == Namespaces.OpcUaBuiltInTypes)
                {
                    template.Write("<opc:Import Namespace=\"{0}\" />", Namespaces.OpcUaBuiltInTypes);
                }
                else
                {
                    template.Write(GetImportStatment(namespaceUri));
                }

                return(null);
            }

            return(TemplatePath + "BuiltInTypes.bsd");
        }
        /// <summary>
        /// Chooses the template for the data type.
        /// </summary>
        private string LoadTemplate_ComplexTypeFields(Template template, Context context)
        {
            ComplexType complexType = context.Target as ComplexType;

            if (complexType == null)
            {
                return(null);
            }

            foreach (FieldType field in complexType.Field)
            {
                template.WriteLine(String.Empty);
                template.Write(context.Prefix);
                template.Write("<opc:Field Name=\"{0}\" DataType=\"{1}\"", field.Name, GetPrefixedName(field.DataType));

                if (field.ValueRank >= 0)
                {
                    template.Write(" ValueRank=\"Array\"");
                }

                template.Write(" />");
            }

            return(null);
        }
        /// <summary>
        /// Writes an enumerated value in an OPCBinary schema.
        /// </summary>
        private string LoadTemplate_EnumeratedValue(Template template, Context context)
        {
            EnumeratedValue valueType = context.Target as EnumeratedValue;

            if (valueType == null)
            {
                return(null);
            }

            template.WriteLine(String.Empty);
            template.Write(context.Prefix);
            template.Write("<xs:enumeration value=\"{0}_{1}\" />", valueType.Name, valueType.Value);

            /*
             * if (valueType.Value != 1)
             * {
             *  template.WriteLine(">");
             *  template.WriteLine("{0}  <xs:annotation>", context.Prefix);
             *  template.WriteLine("{0}    <xs:appinfo>", context.Prefix);
             *  template.WriteLine("{0}      <EnumerationValue xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">{1}</EnumerationValue>", context.Prefix, valueType.Value);
             *  template.WriteLine("{0}    </xs:appinfo>", context.Prefix);
             *  template.WriteLine("{0}  </xs:annotation>", context.Prefix);
             *  template.WriteLine("{0}</xs:enumeration>", context.Prefix);
             * }
             * else
             * {
             *  template.Write(" />");
             * }
             */

            return(null);
        }
        /// <summary>
        /// Writes an enumerated value in an OPCBinary schema.
        /// </summary>
        private string LoadTemplate_EnumeratedValue(Template template, Context context)
        {
            EnumeratedValue valueType = context.Target as EnumeratedValue;

            if (valueType == null)
            {
                return(null);
            }

            template.WriteLine(String.Empty);
            template.Write(context.Prefix);
            template.Write("<opc:EnumeratedValue Name=\"{0}\" Value=\"{1}\" />", valueType.Name, valueType.Value);

            return(null);
        }
        /// <summary>
        /// Chooses the template for the data type.
        /// </summary>
        private string LoadTemplate_EnumeratedTypeValues(Template template, Context context)
        {
            EnumeratedType enumeratedType = context.Target as EnumeratedType;

            if (enumeratedType == null)
            {
                return(null);
            }

            foreach (EnumeratedValue value in enumeratedType.Value)
            {
                template.WriteLine(String.Empty);
                template.Write(context.Prefix);
                template.Write("<opc:Field Name=\"{0}\" Identifier=\"{1}\" />", value.Name, value.Value);
            }

            return(null);
        }
Esempio n. 6
0
        private bool WriteTemplate_Enum(Template template, Context context)
        {
            EnumeratedValue field = context.Target as EnumeratedValue;

            if (field != null)
            {
                context.BlankLine = false;

                template.Write(string.Format("\n  {{ {0}, \"{1}\" }},", field.Value, field.Name));
                return(true);
            }
            return(false);
        }
Esempio n. 7
0
        private bool WriteTemplate_Parser(Template template, Context context)
        {
            FieldType field = context.Target as FieldType;

            if (field != null)
            {
                DataType dt            = m_validator.ResolveType(field.DataType);
                string   sDataTypeName = dt.Name;

                if (field.ValueRank == -1)
                {
                    //if (field.DataType.Namespace == "http://opcfoundation.org/UA/BuiltInTypes/" ||
                    //    field.DataType.Namespace == "http://opcfoundation.org/UA/Core/DataTypes/")
                    if (m_hashSimpleTypes.ContainsKey(sDataTypeName))
                    {
                        m_lstFields.Add(new HFEntry(field.Name, sDataTypeName));
                        template.Write(string.Format("\n  parse{0}(subtree, tvb, pOffset, hf_opcua_{1});", sDataTypeName, field.Name));
                    }
                    else if ((dt as EnumeratedType) != null)
                    {
                        template.Write(string.Format("\n  parse{0}(subtree, tvb, pOffset);", sDataTypeName));
                    }
                    else
                    {
                        template.Write(string.Format("\n  parse{0}(subtree, tvb, pOffset, \"{1}\");", sDataTypeName, field.Name));
                    }
                }
                else
                {
                    //if (field.DataType.Namespace == "http://opcfoundation.org/UA/BuiltInTypes/" ||
                    //    field.DataType.Namespace == "http://opcfoundation.org/UA/Core/DataTypes/")
                    if (m_hashSimpleTypes.ContainsKey(sDataTypeName))
                    {
                        m_lstFields.Add(new HFEntry(field.Name, sDataTypeName));
                        template.Write(string.Format("\n  parseArraySimple(subtree, tvb, pOffset, hf_opcua_{1}, parse{0});", sDataTypeName, field.Name));
                    }
                    else if ((dt as EnumeratedType) != null)
                    {
                        template.Write(string.Format("\n  parseArrayEnum(subtree, tvb, pOffset, parse{0});", sDataTypeName));
                    }
                    else
                    {
                        template.Write(string.Format("\n  parseArrayComplex(subtree, tvb, pOffset, \"{1}\", parse{0});", sDataTypeName, field.Name));
                    }
                }
            }
            return(false);
        }
        /// <summary>
        /// Writes a field in an OPCBinary schema.
        /// </summary>
        private string LoadTemplate_Field(Template template, Context context)
        {
            FieldType fieldType = context.Target as FieldType;

            if (fieldType == null)
            {
                return(null);
            }

            // resolve any type definitions.
            DataType datatype = Validator.ResolveType(fieldType.DataType);

            if (datatype == null)
            {
                throw new ApplicationException(String.Format("Could not find datatype '{0}' for field '{1}'.", fieldType.DataType, fieldType.Name));
            }

            template.WriteLine(String.Empty);
            template.Write(context.Prefix);
            template.Write("<xs:element name=\"{0}\"", fieldType.Name);

            if (datatype.Name == "XmlElement" && fieldType.ValueRank < 0)
            {
                template.WriteLine(">");
                template.WriteLine("{0}  <xs:complexType>", context.Prefix);
                template.WriteLine("{0}    <xs:sequence>", context.Prefix);
                template.WriteLine("{0}      <xs:any minOccurs=\"0\" processContents=\"lax\" />", context.Prefix);
                template.WriteLine("{0}    </xs:sequence>", context.Prefix);
                template.WriteLine("{0}  </xs:complexType>", context.Prefix);

                template.Write("{0}</xs:element>", context.Prefix);
            }
            else
            {
                template.Write(" type=\"{0}\" minOccurs=\"0\"", GetXmlSchemaTypeName(datatype.QName, fieldType.ValueRank));

                if (datatype.Name == "String" || datatype.Name == "ByteString")
                {
                    template.Write(" nillable=\"true\"");
                }

                template.Write(" />");
            }

            return(null);
        }
        /// <summary>
        /// Writes a field in an OPCBinary schema.
        /// </summary>
        private string LoadTemplate_Field(Template template, Context context)
        {
            FieldType fieldType = context.Target as FieldType;

            if (fieldType == null)
            {
                return(null);
            }

            // resolve any type definitions.
            DataType datatype = Validator.ResolveType(fieldType.DataType);

            if (datatype == null)
            {
                throw new ApplicationException(String.Format("Could not find datatype '{0}' for field '{1}'.", fieldType.DataType, fieldType.Name));
            }

            template.WriteLine(String.Empty);
            template.Write(context.Prefix);

            if (fieldType.ValueRank == 0)
            {
                template.WriteLine("<opc:Field Name=\"NoOf{0}\" TypeName=\"opc:Int32\" />", fieldType.Name);
                template.Write(context.Prefix);
            }

            template.Write("<opc:Field Name=\"{0}\"", fieldType.Name);
            template.Write(" TypeName=\"{0}\"", GetBinarySchemaTypeName(datatype.QName));

            if (fieldType.ValueRank == 0)
            {
                template.Write(" LengthField=\"NoOf{0}\"", fieldType.Name);
            }

            template.Write(" />");

            return(null);
        }
Esempio n. 10
0
        private bool WriteTemplate_Field(Template template, Context context)
        {
            HFEntry entry = context.Target as HFEntry;

            if (entry != null)
            {
                string sVariableName = "hf_opcua_" + entry.FieldName();
                string sFieldName    = entry.FieldName();
                string sDataType     = "";
                string sBase         = "BASE_NONE";

                context.BlankLine = false;

                switch (entry.DataTypeName())
                {
                case "Boolean": sDataType = "FT_BOOLEAN"; break;

                case "Byte": sDataType = "FT_UINT8"; sBase = "BASE_DEC"; break;

                case "SByte": sDataType = "FT_INT8"; sBase = "BASE_DEC"; break;

                case "UInt16": sDataType = "FT_UINT16"; sBase = "BASE_DEC"; break;

                case "Int16": sDataType = "FT_INT16"; sBase = "BASE_DEC"; break;

                case "UInt32": sDataType = "FT_UINT32"; sBase = "BASE_DEC"; break;

                case "Int32": sDataType = "FT_INT32"; sBase = "BASE_DEC"; break;

                case "UInt64": sDataType = "FT_UINT64"; sBase = "BASE_DEC"; break;

                case "Int64": sDataType = "FT_INT64"; sBase = "BASE_DEC"; break;

                case "Float": sDataType = "FT_FLOAT"; break;

                case "Double": sDataType = "FT_DOUBLE"; break;

                case "Guid": sDataType = "FT_GUID"; break;

                case "String": sDataType = "FT_STRING"; break;

                case "StatusCode": sDataType = "FT_UINT32"; sBase = "BASE_HEX"; break;

                case "ByteString": sDataType = "FT_BYTES"; sBase = "BASE_HEX"; break;

                case "XmlElement": sDataType = "FT_BYTES"; sBase = "BASE_HEX"; break;

                case "DateTime": sDataType = "FT_ABSOLUTE_TIME"; break;

                default:
                    sDataType = "FT_UNKNOWN";
                    break;
                }

                if (sDataType != "FT_UNKNOWN")
                {
                    if (context.Token == "// _INDECES_")
                    {
                        string sFormat = "\nint {0} = -1;";
                        string sEntry  = string.Format(sFormat, sVariableName);
                        template.Write(sEntry);
                    }
                    else if (context.Token == "// _EXTERNINDECES_")
                    {
                        string sFormat = "\nextern int {0};";
                        string sEntry  = string.Format(sFormat, sVariableName);
                        template.Write(sEntry);
                    }
                    else if (context.Token == "// _FIELDS_")
                    {
                        string sFormat = "\n   {{ &{0}, {{ \"{1}\", \"\", {2}, {3}, NULL, 0x0, \"\", HFILL }} }}";
                        string sEntry  = string.Format(sFormat, sVariableName, sFieldName, sDataType, sBase);

                        if (!context.FirstInList)
                        {
                            template.Write(",");
                        }
                        template.Write(sEntry);
                    }
                }
            }

            return(true);
        }