/**
  * Converts a field type into a C# field type name string.
  */
 public static string ToCSharpType(IFieldType fieldType)
 {
     if (fieldType is PrimitiveFieldType)
     {
         PrimitiveFieldType primitiveFieldType = (PrimitiveFieldType)fieldType;
         return(ToCSharpPrimitiveType(primitiveFieldType.PrimitiveType));
     }
     else if (fieldType is ReferenceFieldType)
     {
         ReferenceFieldType referenceFieldType = (ReferenceFieldType)fieldType;
         if (referenceFieldType.Referrable is PatternBufferEnum)
         {
             return(ToCSharpName(((ReferenceFieldType)fieldType).ReferrableName));
         }
         else
         {
             return(ToCSharpName(((ReferenceFieldType)fieldType).ReferrableName));
         }
     }
     else if (fieldType is ListFieldType)
     {
         return("List<" + ToCSharpType(((ListFieldType)fieldType).ElementType) + ">");
     }
     else if (fieldType is SetFieldType)
     {
         return("HashSet<" + ToCSharpType(((SetFieldType)fieldType).ElementType) + ">");
     }
     else if (fieldType is MapFieldType)
     {
         return("Dictionary<" + ToCSharpType(((MapFieldType)fieldType).KeyType) + "," + ToCSharpType(((MapFieldType)fieldType).ValueType) + ">");
     }
     return("WHATEVS");
 }
        private FieldDefinition CreateCustomObjectReferenceFieldDefinition()
        {
            FieldDefinition fieldDefinition = new FieldDefinition();

            fieldDefinition.Name     = "customobjectfield";
            fieldDefinition.Required = false;
            fieldDefinition.Label    = new LocalizedString();
            fieldDefinition.Label.Add("en", "reference description");
            ReferenceFieldType fieldType = new ReferenceFieldType();

            fieldType.ReferenceTypeId = ReferenceFieldTypeId.KeyValueDocument;
            fieldDefinition.Type      = fieldType;
            return(fieldDefinition);
        }
        private FieldDefinition CreateReferenceFieldDefinition()
        {
            FieldDefinition fieldDefinition = new FieldDefinition();

            fieldDefinition.Name     = "reference-field";
            fieldDefinition.Required = false;
            fieldDefinition.Label    = new LocalizedString();
            fieldDefinition.Label.Add("en", "reference description");
            ReferenceFieldType fieldType = new ReferenceFieldType();

            fieldType.ReferenceTypeId = ReferenceFieldTypeId.Category;
            fieldDefinition.Type      = fieldType;
            return(fieldDefinition);
        }
Esempio n. 4
0
        /**
         * Appends C# code to serialize a C# list into bytes.
         */
        public static void AppendSerializerWriteCollection(ref string code, string fieldName, IFieldType elementType, string subfieldName, string schemaObjectTypeName)
        {
            string subfield = "";

            if (subfieldName != null)
            {
                subfield = "." + subfieldName;
            }

            // Deal with list lengths
            string targetList = "o." + fieldName + subfield;

            code += "            if (o." + fieldName + " == null || " + targetList + " == null || " + targetList + ".Count == 0) {\r\n";
            PBP.AppendWriteByte(ref code, "0");
            code += "            }\r\n";
            code += "            else { \r\n";
            PBP.AppendWriteVUInt16(ref code, targetList + ".Count");

            if (elementType is PrimitiveFieldType)
            {
                PrimitiveFieldType primitiveFieldType = (PrimitiveFieldType)elementType;
                code += "                foreach (" + PB.ToCSharpType(primitiveFieldType) + " primitive in " + targetList + ") {\r\n";
                PBP.AppendWritePrimitive(ref code, "primitive", primitiveFieldType.PrimitiveType);
                code += "                }\r\n";
            }
            else if (elementType is ReferenceFieldType)
            {
                ReferenceFieldType referenceFieldType = (ReferenceFieldType)elementType;
                // list<enum>
                if (referenceFieldType.Referrable is PatternBufferEnum)
                {
                    PatternBufferEnum patternBufferEnum = (PatternBufferEnum)referenceFieldType.Referrable;
                    code += "                foreach (" + PB.ToCSharpName(patternBufferEnum.Name) + " enumValue in " + targetList + ") {\r\n";
                    PBP.AppendWriteByte(ref code, "enumValueIndexMap[\"" + referenceFieldType.ReferrableName + "\"][enumValue.ToString()];\r\n");
                    code += "                }\r\n";
                }
                // list<something>
                else if (referenceFieldType.Referrable is PatternBufferType)
                {
                    PatternBufferType patternBufferType = (PatternBufferType)referenceFieldType.Referrable;
                    // All objects in the list are the same type; do not write type IDs for each item
                    if (patternBufferType.IsFinal)
                    {
                        code += "                foreach (" + PB.ToCSharpName(patternBufferType.Name) + " finalObject in " + targetList + ") {\r\n";
                        code += "                    Energize(finalObject, bytes, ref index, false);\r\n";
                        code += "                }\r\n";
                    }
                    // The objects in the list may be of different types; write the type ID for each item
                    else
                    {
                        code += "                foreach (" + schemaObjectTypeName + " abstractObject in " + targetList + ") {\r\n";
                        code += "                    Energize((" + schemaObjectTypeName + ")abstractObject, bytes, ref index, true);\r\n";
                        code += "                }\r\n";
                    }
                }
                else
                {
                    // what
                }
            }
            code += "            }\r\n";
        }
Esempio n. 5
0
        /**
         * Appends C# code to read a collection of serialized objects into the appropriate collection type.
         */
        public static void AppendSerializerReadCollection(ref string code, string fieldName, IFieldType elementType, string collectionTypeName, string subfieldName)
        {
            // Read the list item count
            code += "            // Read list item count\r\n";
            string countFieldName = PB.CreateRandomFieldName("count");

            code += "            ushort " + countFieldName + ";\r\n";
            PBP.AppendReadVUInt16(ref code, countFieldName);

            // Continue if the bytes indicate more than zero items.
            code += "            // Read list items\r\n";
            code += "            if (" + countFieldName + " > 0) {\r\n";

            // The element size is constant if:
            // 1) It's a primitive field
            // 2) It's not a variant primitive
            // 3) It's not a string
            // Serialize constant-sized primitives
            if ((elementType is PrimitiveFieldType))
            {
                PrimitiveFieldType primitiveFieldType = (PrimitiveFieldType)elementType;
                string             cappedElementName  = PB.ToCapitalizedCSharpType(primitiveFieldType);
                code += "                " + fieldName + " = this.instantiator.Acquire" + collectionTypeName + "Of" + cappedElementName + "();\r\n";
                string tempFieldName = PB.CreateRandomFieldName("listValue");
                code += "                " + PB.ToCSharpType(primitiveFieldType) + " " + tempFieldName + ";\r\n";
                string i = PB.CreateRandomFieldName("i");
                code += "                for (int " + i + " = 0; " + i + " < " + countFieldName + "; " + i + "++) {\r\n";
                code += "                    // Read " + primitiveFieldType.PrimitiveType + " list item\r\n";
                PBP.AppendReadPrimitive(ref code, tempFieldName, primitiveFieldType.PrimitiveType);
                code += "                    " + fieldName + ".Add(" + tempFieldName + ");\r\n";
                code += "                }\r\n";
            }

            // Serialize variable size list elements (incl. references, enums, strings)
            else
            {
                ReferenceFieldType referenceFieldType = (ReferenceFieldType)elementType;
                // list<enum>
                if (referenceFieldType.Referrable is PatternBufferEnum)
                {
                    PatternBufferEnum e                 = (PatternBufferEnum)referenceFieldType.Referrable;
                    string            enumName          = PB.ToCSharpName(e.Name);
                    string            cappedElementName = PB.ToCapitalizedCSharpType(referenceFieldType);
                    code += "                " + fieldName + " = this.instantiator.Acquire" + collectionTypeName + "Of" + cappedElementName + "();\r\n";
                    string i = PB.CreateRandomFieldName("i");
                    code += "                for (int " + i + " = 0; " + i + " < " + countFieldName + "; " + i + "++) {\r\n";
                    code += "                    " + fieldName + ".Add((" + enumName + ")System.Enum.Parse(typeof(" + enumName + "), enumIndexValueMap[\"" + referenceFieldType.ReferrableName + "\"][bytes[index++]]));\r\n";
                    code += "                }\r\n";
                }
                // list<something>
                else if (referenceFieldType.Referrable is PatternBufferType)
                {
                    PatternBufferType patternBufferType = (PatternBufferType)referenceFieldType.Referrable;
                    string            elementTypeName   = PB.ToCSharpType(referenceFieldType);
                    string            cappedElementName = PB.ToCapitalizedCSharpType(referenceFieldType);
                    code += "                " + fieldName + " = this.instantiator.Acquire" + collectionTypeName + "Of" + cappedElementName + "();\r\n";
                    string i = PB.CreateRandomFieldName("li");
                    // All objects in the list are the same type
                    if (patternBufferType.IsFinal)
                    {
                        code += "                for (int " + i + " = 0; " + i + " < " + countFieldName + "; " + i + "++) {\r\n";
                        code += "                    " + fieldName + ".Add((" + elementTypeName + ")Energize(bytes, ref index, " + patternBufferType.TypeId + "));\r\n";
                        code += "                }\r\n";
                    }
                    // The objects in the list may be of different types
                    else
                    {
                        code += "                for (int " + i + " = 0; " + i + " < " + countFieldName + "; " + i + "++) {\r\n";
                        code += "                    " + fieldName + ".Add((" + elementTypeName + ")Energize(bytes, ref index));\r\n";
                        code += "                }\r\n";
                    }
                }
                else
                {
                    // what
                }
            }
            code += "            }\r\n";
        }
Esempio n. 6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="mailingListId"></param>
        /// <param name="emailAddressTypeItems"></param>
        /// <param name="allowDuplicates"></param>
        /// <param name="overwrite"></param>
        /// <param name="synchronise"></param>
        /// <param name="referenceField"></param>
        /// <param name="allowBouncedOut"></param>
        /// <returns></returns>
        internal List <ImportEmailAddressRespType> Import(string mailingListId = null, EmailAddressType[] emailAddressTypeItems = null, bool allowDuplicates = false, bool overwrite = false, bool synchronise = false, ReferenceFieldType referenceField = ReferenceFieldType.email, bool allowBouncedOut = true)
        {
            try
            {
                if (_import == null)
                {
                    var req = new ImportEmailAddressesReq()
                    {
                        header = Client.RequestHeader
                    };

                    if (!string.IsNullOrWhiteSpace(mailingListId))
                    {
                        req.mailingListId = int.Parse(mailingListId);
                    }
                    req.mailingListIdSpecified = true;

                    if (emailAddressTypeItems != null)
                    {
                        req.emailAddressTypeItems = emailAddressTypeItems;
                    }

                    req.allowBouncedOut          = allowBouncedOut;
                    req.allowBouncedOutSpecified = true;
                    req.allowDuplicates          = allowDuplicates;
                    req.allowDuplicatesSpecified = true;
                    req.overwrite               = overwrite;
                    req.overwriteSpecified      = true;
                    req.synchronise             = synchronise;
                    req.synchroniseSpecified    = true;
                    req.referenceField          = referenceField;
                    req.referenceFieldSpecified = true;

                    _import = _client.API.ImportEmailAddresses(req);
                }

                if (_import.errorCode == (int)errorCode.No_error)
                {
                    return(_import.importEmailAddressRespTypeItems.ToList <ImportEmailAddressRespType>());
                }

                throw new FlexMailException(_import.errorMessage, _import.errorCode);
            }
            catch (Exception ex)
            {
                //telemetry.TrackException(ex, new Dictionary<string, string> { { "Flexmail", "EmailAddress.Import" } });
                if (ex is FlexMailException)
                {
                    throw (ex);
                }
            }
            finally
            {
                _import = null;
            }
            return(new List <ImportEmailAddressRespType>());
        }