Example #1
0
        public override void Generate()
        {
#line 34 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
            this.WriteObjects("\r\n");
#line 36 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
            string         methodName = direction.ToString();
            string         argName;
            string         argType;
            string         additionalArgs             = String.Empty;
            string         callBaseWithAdditionalArgs = String.Empty;
            SerializerType serType;

            switch (direction)
            {
            case SerializerDirection.ToStream:
                argType                    = "Zetbox.API.ZetboxStreamWriter";
                argName                    = "binStream";
                methodName                 = "ToStream";
                serType                    = SerializerType.Binary;
                additionalArgs             = ", HashSet<IStreamable> auxObjects, bool eagerLoadLists";
                callBaseWithAdditionalArgs = ", auxObjects, eagerLoadLists";
                break;

            case SerializerDirection.FromStream:
                argType    = "Zetbox.API.ZetboxStreamReader";
                argName    = "binStream";
                methodName = "FromStream";
                serType    = SerializerType.Binary;
                break;

            case SerializerDirection.Export:
                argType                    = "System.Xml.XmlWriter";
                additionalArgs             = ", string[] modules";
                callBaseWithAdditionalArgs = ", modules";
                argName                    = "xml";
                methodName                 = "Export";
                serType                    = SerializerType.ImportExport;
                break;

            case SerializerDirection.MergeImport:
                argType    = "System.Xml.XmlReader";
                argName    = "xml";
                methodName = "MergeImport";
                serType    = SerializerType.ImportExport;
                break;

            default:
                throw new ArgumentOutOfRangeException("direction");
            }

            var fieldList = fields.Where(f => (f.SerializerType & serType) == serType).ToList();

            switch (direction)
            {
            case SerializerDirection.ToStream:
            case SerializerDirection.Export:

#line 84 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                this.WriteObjects("        public ", overrideAndCallBase ? "override" : "virtual", " void ", methodName, "(", argType, " ", argName, "", additionalArgs, ")\r\n");
                this.WriteObjects("        {\r\n");
#line 86 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                if (overrideAndCallBase)
                {
#line 87 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                    this.WriteObjects("            base.", methodName, "(", argName, "", callBaseWithAdditionalArgs, ");\r\n");
#line 88 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                }
                else if (direction == SerializerDirection.Export && !String.IsNullOrEmpty(exportGuidBackingStore))
                {
#line 89 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                    this.WriteObjects("            xml.WriteAttributeString(\"ExportGuid\", ", exportGuidBackingStore, ".ToString());\r\n");
#line 90 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                }
#line 91 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                this.WriteObjects("            // it may be only an empty shell to stand-in for unreadable data\r\n");
                this.WriteObjects("            if (!CurrentAccessRights.HasReadRights()) return;\r\n");
#line 93 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                foreach (var serMember in fieldList)
#line 94 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                {
#line 95 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                    if (direction == SerializerDirection.Export && serMember.XmlName == "ExportGuid")
#line 96 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                    {
#line 97 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                        continue;
#line 98 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                    }
#line 99 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                    ApplySerializer(direction, serMember, argName);
#line 100 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                }
#line 101 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                this.WriteObjects("        }\r\n");
#line 102 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                break;

#line 103 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
            case SerializerDirection.MergeImport:
#line 104 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                this.WriteObjects("        public ", overrideAndCallBase ? "override" : "virtual", " void ", methodName, "(", argType, " ", argName, "", additionalArgs, ")\r\n");
                this.WriteObjects("        {\r\n");
#line 106 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                if (overrideAndCallBase)
                {
#line 107 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                    this.WriteObjects("            base.", methodName, "(", argName, "", callBaseWithAdditionalArgs, ");\r\n");
#line 108 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                }
#line 109 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                this.WriteObjects("            // it may be only an empty shell to stand-in for unreadable data\r\n");
                this.WriteObjects("            if (!CurrentAccessRights.HasReadRights()) return;\r\n");
#line 111 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                if (fieldList.Count > 0)
                {
#line 112 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                    this.WriteObjects("            switch (xml.NamespaceURI + \"|\" + xml.LocalName) {\r\n");
#line 113 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                    foreach (var serMember in fieldList)
#line 114 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                    {
#line 115 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                        ApplySerializer(direction, serMember, argName);
#line 116 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                    }
#line 117 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                    this.WriteObjects("            }\r\n");
#line 118 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                }
#line 119 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                this.WriteObjects("        }\r\n");
#line 120 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                break;

#line 121 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
            case SerializerDirection.FromStream:
#line 122 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                this.WriteObjects("        public ", overrideAndCallBase ? "override" : "virtual", " IEnumerable<IPersistenceObject> ", methodName, "(", argType, " ", argName, "", additionalArgs, ")\r\n");
                this.WriteObjects("        {\r\n");
#line 124 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                if (overrideAndCallBase)
                {
#line 125 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                    this.WriteObjects("            var baseResult = base.", methodName, "(", argName, "", callBaseWithAdditionalArgs, ");\r\n");
                    this.WriteObjects("            var result = new List<IPersistenceObject>();\r\n");
#line 127 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                }
                else
                {
#line 128 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                    this.WriteObjects("            object baseResult = null;\r\n");
                    this.WriteObjects("            var result = new List<IPersistenceObject>();\r\n");
#line 130 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                }
#line 131 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                this.WriteObjects("            // it may be only an empty shell to stand-in for unreadable data\r\n");
                this.WriteObjects("            if (CurrentAccessRights != Zetbox.API.AccessRights.None) {\r\n");
#line 133 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                foreach (var serMember in fieldList)
#line 134 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                {
#line 135 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                    ApplySerializer(direction, serMember, argName);
#line 136 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                }
#line 137 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                this.WriteObjects("            } // if (CurrentAccessRights != Zetbox.API.AccessRights.None)\r\n");
                this.WriteObjects("            return baseResult == null\r\n");
                this.WriteObjects("                ? result.Count == 0\r\n");
                this.WriteObjects("                    ? null\r\n");
                this.WriteObjects("                    : result\r\n");
                this.WriteObjects("                : baseResult.Concat(result);\r\n");
                this.WriteObjects("        }\r\n");
#line 145 "P:\zetbox\Zetbox.Generator\Templates\Serialization\SerializerTemplate.cst"
                break;
            }
        }