private static ConduitSpecification CreateSingleConduitSpecification(string manufacturer, string productModel, ConduitColorEnum color, int outerDiameter, int innerDiameter)
        {
            var conduitSpec = new ConduitSpecification()
            {
                Id            = GUIDHelper.StringToGUID(color + ":" + outerDiameter + ":" + innerDiameter),
                Kind          = ConduitKindEnum.SingleConduit,
                Shape         = ConduitShapeKindEnum.Round,
                Color         = color,
                OuterDiameter = outerDiameter,
                InnerDiameter = innerDiameter,
                ProductModels = new List <ProductModelInfo>()
                {
                    new ProductModelInfo()
                    {
                        Id           = GUIDHelper.StringToGUID(manufacturer + ":" + productModel),
                        Name         = productModel,
                        Manufacturer = new ManufacturerInfo()
                        {
                            Id   = GUIDHelper.StringToGUID(manufacturer),
                            Name = manufacturer
                        }
                    }
                }
            };

            return(conduitSpec);
        }
        private static ConduitSpecification CreateInnerConduitSpecification(string multiConduitCode, int innerConduitNumber, int outerDiameter, int innerDiameter)
        {
            var conduitSpec = new ConduitSpecification()
            {
                Id             = GUIDHelper.StringToGUID(multiConduitCode + ":" + innerConduitNumber),
                SequenceNumber = innerConduitNumber,
                Kind           = ConduitKindEnum.InnerConduit,
                Shape          = ConduitShapeKindEnum.Round,
                Color          = (ConduitColorEnum)innerConduitNumber,
                OuterDiameter  = outerDiameter,
                InnerDiameter  = innerDiameter
            };

            return(conduitSpec);
        }
        private static ConduitSpecification CreateMultiConduitSpecification(string code)
        {
            int outerConduitOuterDiameter = 0;
            int outerConduitInnerDiameter = 0;

            int innerConduitOuterDiameter = 0;
            int innerConduitInnerDiameter = 0;

            // Default round shape
            var conduitShape = ConduitShapeKindEnum.Round;

            // Default orange color
            var conduitColor = ConduitColorEnum.Orange;

            // If flatliner
            if (code.EndsWith("F"))
            {
                conduitShape = ConduitShapeKindEnum.Flat;
                conduitColor = ConduitColorEnum.Clear;
            }

            var numberOfInnerConduits = 0;


            var assetInfo = new AssetInfo();

            // Handle common GM Plast conduit types
            if (code.StartsWith("G"))
            {
                assetInfo.Manufacturer = new ManufacturerInfo()
                {
                    Name = "GM Plast"
                };

                if (code == "G12F")
                {
                    assetInfo.Model = new ProductModelInfo()
                    {
                        Name = "Flatliner 12x12/8"
                    };

                    numberOfInnerConduits     = 12;
                    innerConduitOuterDiameter = 12;
                    innerConduitInnerDiameter = 8;
                }
                else if (code == "G10F")
                {
                    assetInfo.Model = new ProductModelInfo()
                    {
                        Name = "Flatliner 10x12/8"
                    };

                    numberOfInnerConduits     = 10;
                    innerConduitOuterDiameter = 12;
                    innerConduitInnerDiameter = 8;
                }
                else if (code == "G6F")
                {
                    assetInfo.Model = new ProductModelInfo()
                    {
                        Name = "Flatliner 6x12/8"
                    };

                    numberOfInnerConduits     = 6;
                    innerConduitOuterDiameter = 12;
                    innerConduitInnerDiameter = 8;
                }
                else
                {
                    throw new ArgumentException("Don't know how to handle GM Plast conduit type: " + code);
                }
            }

            // Handle common Emetelle conduit types
            if (code.StartsWith("E"))
            {
                assetInfo.Manufacturer = new ManufacturerInfo()
                {
                    Name = "Emetelle"
                };

                if (code == "E10R")
                {
                    assetInfo.Model = new ProductModelInfo()
                    {
                        Name = "Ø50 10x12/8"
                    };
                    outerConduitOuterDiameter = 50;

                    numberOfInnerConduits     = 10;
                    innerConduitOuterDiameter = 12;
                    innerConduitInnerDiameter = 8;
                }
                else if (code == "E7R")
                {
                    assetInfo.Model = new ProductModelInfo()
                    {
                        Name = "Ø40 7x12/8"
                    };

                    outerConduitOuterDiameter = 40;

                    numberOfInnerConduits     = 7;
                    innerConduitOuterDiameter = 12;
                    innerConduitInnerDiameter = 8;
                }
                else if (code == "E5R")
                {
                    assetInfo.Model = new ProductModelInfo()
                    {
                        Name = "Ø35 5x12/8"
                    };

                    outerConduitOuterDiameter = 35;

                    numberOfInnerConduits     = 5;
                    innerConduitOuterDiameter = 12;
                    innerConduitInnerDiameter = 8;
                }
                else
                {
                    throw new ArgumentException("Don't know how to handle Emetelle conduit type: " + code);
                }
            }

            var conduitSpec = new ConduitSpecification()
            {
                Id            = GUIDHelper.StringToGUID(code),
                Kind          = ConduitKindEnum.MultiConduit,
                Shape         = conduitShape,
                Color         = conduitColor,
                OuterDiameter = outerConduitOuterDiameter,
                InnerDiameter = outerConduitInnerDiameter,
                ProductModels = new List <ProductModelInfo>()
                {
                    new ProductModelInfo()
                    {
                        Id           = GUIDHelper.StringToGUID(assetInfo.Manufacturer.Name + ":" + assetInfo.Model.Name),
                        Name         = assetInfo.Model.Name,
                        Manufacturer = new ManufacturerInfo()
                        {
                            Id   = GUIDHelper.StringToGUID(assetInfo.Manufacturer.Name),
                            Name = assetInfo.Manufacturer.Name
                        }
                    }
                }
            };


            // Create the children
            conduitSpec.ChildSpecifications = new List <ConduitSpecification>();

            for (int i = 1; i <= numberOfInnerConduits; i++)
            {
                conduitSpec.ChildSpecifications.Add(CreateInnerConduitSpecification(code, i, innerConduitOuterDiameter, innerConduitInnerDiameter));
            }

            return(conduitSpec);
        }