public IhSiteBuilderImportSiteRoot(string siteXML, IhSiteBuilderInfo newSiteInfo, IhSiteBuilderModel siteModels = null, bool allowOverwrite = false, IhSiteBuilderLog siteLog = null)
        {
            this.siteLog = siteLog;
            siteLog.Add("SiteBuilder Import class inizialized");

            this.szSiteXML = siteXML;
            this.allowOverwrite = allowOverwrite;
            this.siteInfoNew = newSiteInfo;

            if (siteModels.Equals(null))
                this.siteModels = new IhSiteBuilderModel();
            else
                this.siteModels = siteModels;

            if (!string.IsNullOrWhiteSpace(siteInfoNew.ProjectName))
            {
                if (siteInfoNew.ProjectNested)
                {
                    siteInfoNew.Namespace = IhSiteBuilderHelper.ReformatName(siteInfoNew.SiteRootName) + "." + IhSiteBuilderHelper.ReformatName(siteInfoNew.ProjectName) + ".Library";
                }
                else
                {
                    siteInfoNew.Namespace = IhSiteBuilderHelper.ReformatName(siteInfoNew.ProjectName) + ".Library";
                }
            }
            else
            {
                siteInfoNew.Namespace = "CrownPeak.CMSAPI.CustomLibrary";
            }
            siteLog.Add("New Namespace: " + siteInfoNew.Namespace);

            PrepareSiteNames();
        }
        /// <summary>
        /// Creates the site structure based on the options provided
        /// </summary>
        public static void ReplicateSite(
			Asset asset,
			string siteXML,
			string collectionPath,
			string siteName = "",
			string projectName = "",
			string workflowName = "",
			string clientName = "",
			bool childProject = false,
			bool mobileOutput = false,
			bool createTemplate = true,
			bool createModel = true,
			bool createSite = true,
			bool createBinary = true,
			bool createWrapper = true,
			bool renewInternalLinks = true,
			bool allowOverwrite = false,
			IhSiteBuilderLog siteLog = null
			)
        {
            siteLog.Add("Replicate site started");

            // Gather site creation/update parameters
            IhSiteBuilderInfo siteInfoNew = new IhSiteBuilderInfo();

            string[] arrCollectionPath = collectionPath.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
            siteInfoNew.CollectionName = arrCollectionPath.Last();

            if (arrCollectionPath.Count() > 1)
            {
                siteInfoNew.CollectionPath = collectionPath;
            }
            else
            {
                siteInfoNew.CollectionPath = "/" + siteInfoNew.CollectionName;
            }

            siteLog.Add("New info collection name: " + siteInfoNew.CollectionName);
            siteLog.Add("New info collection path: " + siteInfoNew.CollectionPath);

            siteInfoNew.SiteRootName = siteName;
            siteInfoNew.ClientName = clientName;
            siteInfoNew.SiteRootParent = siteInfoNew.CollectionPath;
            siteInfoNew.SiteRootPath = siteInfoNew.CollectionPath + "/" + siteName;

            if (!string.IsNullOrWhiteSpace(projectName))
            {
                siteInfoNew.ProjectName = projectName;

                if (childProject)
                {
                    siteInfoNew.ProjectParent = siteInfoNew.SiteRootPath;
                    siteInfoNew.ProjectPath = siteInfoNew.SiteRootPath + "/" + projectName;
                    siteInfoNew.ProjectNested = true;
                }
                else
                {
                    siteInfoNew.ProjectParent = siteInfoNew.CollectionPath;
                    siteInfoNew.ProjectPath = siteInfoNew.CollectionPath + "/" + projectName;
                    siteInfoNew.ProjectNested = false;
                }
            }
            else
            {
                siteInfoNew.TemplatePath = string.Format("/System/Templates/{0}/{1}", siteInfoNew.CollectionName, siteInfoNew.SiteRootName);
                siteInfoNew.ModelPath = string.Format("/System/Models/{0}/{1}", siteInfoNew.CollectionName, siteInfoNew.SiteRootName);
            }
            siteInfoNew.WorkflowName = workflowName;

            // Begin creation/update of site
            IhSiteBuilderModel siteModels = new IhSiteBuilderModel();

            if (!string.IsNullOrWhiteSpace(siteXML))
            {
                siteLog.Add("Site XML found and running");
                IhSiteBuilderImportSiteRoot siteImport = new IhSiteBuilderImportSiteRoot(siteXML, siteInfoNew, siteModels, allowOverwrite, siteLog);

                siteImport.CreateSiteRoot();

                if (!string.IsNullOrWhiteSpace(projectName))
                    siteImport.CreateProject();

                if (createTemplate)
                {
                    siteImport.CreateTemplate();
                }

                if (createModel)
                {
                    siteImport.CreateModel();
                }

                if (createSite)
                {
                    siteImport.CreateSite();
                }

                if (createBinary)
                {
                    siteImport.CreateBinaryFile(siteXML);
                }

                if (createWrapper)
                {
                    siteImport.CreateBinaryWrapper(siteXML);
                }

                if (!string.IsNullOrWhiteSpace(projectName))
                {
                    siteImport.CreateLibrary();

                    #region *** IH Custom Code ***
                    siteImport.CreateLibraryReferences();
                    #endregion
                }

                if (renewInternalLinks)
                {
                    siteImport.RenewAllContentAsset();
                }

                siteLog.Add("Import DONE");

                //Util.Email("Import Script Finished", DateTime.Now.ToString(), "*****@*****.**");
            }
            else
                siteLog.Add("Site XML Empty or not loaded correctly");
        }
        /// <summary>
        /// Get source data from XML
        /// </summary>
        private void PrepareSiteNames()
        {
            siteLog.Add("Start getting source site information");
            siteInfoOld = new IhSiteBuilderInfo();
            foreach (XmlNode nodeInfo in Util.LoadXml(szSiteXML, "site_info"))
            {
                foreach (XmlNode nodeSite in nodeInfo.XmlNodes)
                {
                    switch (nodeSite.Name)
                    {
                        //case "site_name":
                        //    siteLog.Add("Site root name: " + nodeSite.Attributes["original_name"]);
                        //    oldSiteInfo.SiteRootName = nodeSite.Attributes["original_name"];
                        //    break;
                        case "site_root":
                            siteLog.Add("SiteRoot name: " + nodeSite.Attributes["name"]);
                            siteLog.Add("SiteRoot path: " + nodeSite.Attributes["path"]);
                            siteLog.Add("SiteRoot parent: " + nodeSite.Attributes["parent"]);

                            siteInfoOld.SiteRootName = nodeSite.Attributes["name"];
                            siteInfoOld.SiteRootPath = nodeSite.Attributes["path"];
                            siteInfoOld.SiteRootParent = nodeSite.Attributes["parent"];
                            break;
                        case "site_model":
                            siteLog.Add("Model root name: " + nodeSite.Attributes["name"]);
                            siteLog.Add("Model root path: " + nodeSite.Attributes["path"]);

                            siteInfoOld.ModelName = nodeSite.Attributes["name"];
                            siteInfoOld.ModelPath = nodeSite.Attributes["path"];
                            break;
                        case "site_template":
                            siteLog.Add("Template root name: " + nodeSite.Attributes["name"]);
                            siteLog.Add("Template root path: " + nodeSite.Attributes["path"]);

                            siteInfoOld.TemplateName = nodeSite.Attributes["name"];
                            siteInfoOld.TemplatePath = nodeSite.Attributes["path"];
                            break;
                        //case "site_collection_name":
                        //    siteLog.Add("Collection name: " + nodeSite.Attributes["original_name"]);
                        //    siteInfoOld.CollectionPath = "/" + nodeSite.Attributes["original_name"];
                        //    siteInfoOld.CollectionName = nodeSite.Attributes["original_name"];
                        //    break;
                        case "site_nav_wrap":
                            siteLog.Add("NavWrap Path: " + nodeSite.Attributes["path"]);

                            siteInfoOld.NavWrapPath = nodeSite.Attributes["path"];
                            break;
                        case "site_project":
                            siteLog.Add("Project name: " + nodeSite.Attributes["name"]);
                            siteLog.Add("Project path: " + nodeSite.Attributes["path"]);
                            siteLog.Add("Project parent: " + nodeSite.Attributes["parent"]);
                            siteInfoOld.ProjectName = nodeSite.Attributes["name"];
                            siteInfoOld.ProjectPath = nodeSite.Attributes["path"];
                            siteInfoOld.ProjectParent = nodeSite.Attributes["parent"];
                            break;
                        case "site_library":
                            siteLog.Add("Library path: " + nodeSite.Attributes["path"]);

                            siteInfoOld.LibraryPath = nodeSite.Attributes["path"];
                            break;
                        case "site_namespace":
                            siteLog.Add("Namespace: " + nodeSite.Attributes["name"]);

                            siteInfoOld.Namespace = nodeSite.Attributes["name"];
                            break;
                        case "site_client_name":
                            siteInfoOld.ClientName = nodeSite.XmlValue;
                            break;
                    }
                }
                break;
            }
            siteLog.Add("End getting source site info");
        }