// ----------------------------------------------------------------------------------------
        /// <!-- CreatePrettyLabel -->
        /// <summary>
        ///
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        protected override string CreatePrettyLabel(string name)
        {
            string       data;
            RandomSource rs = RandomSource.New();
            //Random r = rs.Random;
            string labelType = LblType(name);   // encapsulate

            switch (labelType)
            {
            case "name": data = DbLabels.CreatePrettyLabel(rs.Skew(1, 512), LabelType.name); break;

            default: data = DbLabels.CreatePrettyLabel(rs.Skew(1, 512), LabelType.any); break;
            }
            return(data);
        }
        // ----------------------------------------------------------------------------------------
        /// <!-- CreateDateTime -->
        /// <summary>
        ///      One of the following formats:
        /// 1999-05-31T13:20:00.01-05:00
        /// +14:00..-14:00
        /// 1999-05-31
        /// 13:20:00-05:00
        /// 1999-05
        /// --05-17
        /// ---15
        /// --11--
        /// </summary>
        /// <returns></returns>
        protected override string CreateDateTime(string name)
        {
            string       data = "";
            RandomSource rs   = RandomSource.New();
            DateTime     dtm  = DateTime.UtcNow.AddHours(rs.Skew(-100, 100));
            Random       r    = rs.Random;


            switch (r.Next(1))
            {
            case 0: data = dtm.ToString("yyyy-MM-ddTHH:mm:ss") + CreateTimeZone(r);  break;
                //case 1: data = dtm.ToString("yyyy-MM-dd")          + CreateTimeZone(r); break;
                //case 2: data = dtm.ToString("HH:mm:ss")            + CreateTimeZone(r); break;
            }

            return(data);
        }
        // ----------------------------------------------------------------------------------------
        /// <!-- CreateDate -->
        /// <summary>
        ///      Creates a date string in one of these formats:   1999-05-31-05:00    1999-05-31Z
        ///      1999-05-31    1999-05--
        /// </summary>
        /// <returns></returns>
        /// <remarks>beta code - used once in production</remarks>
        protected override string CreateDate(string name)
        {
            RandomSource rs          = RandomSource.New();
            int          hoursOffset = rs.Skew(-1000, 1000);
            DateTime     time        = DateTime.UtcNow.AddHours(hoursOffset);
            Random       r           = rs.Random;
            string       data        = "";


            switch (r.Next(2))
            {
            // case 0 : data = time.ToString("yyyy-MM--") + CreateTimeZone(r);  break;
            default: data = time.ToString("yyyy-MM-dd") + CreateTimeZone(r); break;
            }

            return(data);
        }
        // ----------------------------------------------------------------------------------------
        /// <!-- CreateString -->
        /// <summary>
        ///      Creates a string to meet a particular set of restrictions
        /// </summary>
        /// <param name="cmd"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        protected override string CreateString(NodeCreationCommand cmd, string name)
        {
            string str = "";

            if (Regex.IsMatch(name, "amount", RegexOptions.IgnoreCase))
            {
                Pause();
            }


            // --------------------------------------------------------------------------
            //  Use the restrictions (new <--> now)
            // --------------------------------------------------------------------------
            RandomSource rs = RandomSource.New();
            Random       r  = rs.Random;

            if (cmd.Enumerations != null && cmd.Enumerations.Count > 0)
            {
                int e = r.Next(cmd.Enumerations.Count);
                str = cmd.Enumerations[e];
            }
            else
            {
                switch (cmd.MaxLength)
                {
                case -1:       // encapsulate
                    if (string.IsNullOrEmpty(cmd.RegexPattern))
                    {
                        bool found = false;       // encapsulate
                        if (!found && IsNumericField(name))
                        {
                            found = true;  str = new RegexGenerator("[0-9]").CreateString(r, rs.Skew(1, 49), cmd.WhiteSpace);
                        }
                        if (!found && IsDateTime(name))
                        {
                            found = true;  str = CreateDateTime(name);
                        }
                        if (!found)
                        {
                            str = CreatePrettyLabel(name);                // encapsulate
                        }
                    }
                    else
                    {
                        bool found = false;
                        if (IsNumericField(name))       // encapsulate
                        {
                            str   = new RegexGenerator(cmd.RegexPattern).CreateString(r, rs.Skew(7, 50), cmd.WhiteSpace);
                            found = true;
                        }
                        if (IsDigitField(name))       // encapsulate
                        {
                            str   = new RegexGenerator(cmd.RegexPattern).CreateString(r, 1, cmd.WhiteSpace);
                            found = true;
                        }
                        if (!found)
                        {
                            str = new RegexGenerator(cmd.RegexPattern).CreateString(r, cmd.WhiteSpace);
                        }
                    }
                    break;

                case 0: str = ""; break;

                default:
                    if (!string.IsNullOrEmpty(cmd.RegexPattern))
                    {
                        // ----------------------------------------------------------
                        //  convert a Regex pattern into a random string that it will match
                        // ----------------------------------------------------------
                        RegexGenerator genRegex = new RegexGenerator(cmd.RegexPattern);
                        str = genRegex.CreateString(r, cmd.WhiteSpace);
                        for (int i = 0; str.Length > cmd.MaxLength && i < 10; i++)
                        {
                            str = genRegex.CreateString(r, cmd.WhiteSpace);
                        }
                    }
                    else       // encapsulate
                    {
                        str = DbLabels.CreatePrettyLabel(r.Next(1, cmd.MaxLength + 1), LabelType.any);
                    }
                    break;
                }
            }

            return(str);
        }