示例#1
0
        private void _processContentConfig(BridgeContentConfig contentConfig, Stream stream)
        {
            var    serializer          = new SerializerBuilder().ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitNull).Build();
            var    watch               = new Stopwatch();
            string serializationFolder = BridgeConfiguration.GetConfig().SerializationFolder;

            _clearTempFolder();
            watch.Start();

            //have this driven by config
            var serializationPath     = $"{serializationFolder}/content/{contentConfig.Name}";
            var tempGUID              = DateTime.Now.Ticks.ToString();
            var tempSerializationPath = $"{serializationFolder}/temp/{tempGUID}/{contentConfig.Name}";
            var pageTypes             = contentConfig.GetPageTypes();
            var fieldsToIgnore        = contentConfig.GetIgnoreFields();
            var path = contentConfig.Query;

            //TODO: Query to see if page types exist, if DOESNT, display that...
            MultiDocumentQuery docs = DocumentHelper.GetDocuments().Path(path).Types(pageTypes.ToArray()).AllCultures().FilterDuplicates();
            var treeNodes           = docs.ToList <TreeNode>();

            foreach (var treeNode in treeNodes)
            {
                watch.Reset();
                watch.Start();
                var mappedItem = treeNode.Adapt <BridgeTreeNode>();
                mappedItem.FieldValues = new Dictionary <string, object>();

                foreach (string columnName in treeNode.ColumnNames)
                {
                    if (!fieldsToIgnore.Contains(columnName))
                    {
                        var columnValue = treeNode.GetValue(columnName);
                        if (columnValue != null)
                        {
                            mappedItem.FieldValues.Add(columnName, columnValue);
                        }
                    }
                }
                mappedItem.ParentNodeGUID = treeNode?.Parent?.NodeGUID;
                var stringBuilder = new StringBuilder();
                var res           = serializer.Serialize(mappedItem);
                stringBuilder.AppendLine(res);
                var      pathToWriteTo = $"{tempSerializationPath}/{mappedItem.NodeAliasPath}#{mappedItem.DocumentCulture}.yaml";
                var      concretePath  = this.GetRootPath(pathToWriteTo);
                FileInfo file          = new FileInfo(concretePath);
                file.Directory.Create(); // If the directory already exists, this method does nothing.
                File.WriteAllText(concretePath, res);
            }
            watch.Stop();
            _outputToStream(stream, $"Generating temp {contentConfig.Name} - {watch.ElapsedMilliseconds}ms");
            _processDifferences(stream, watch, serializationPath, tempSerializationPath);
        }
示例#2
0
        private void _processContentConfig(BridgeContentConfig contentConfig, Stream stream)
        {
            var    serializer          = new SerializerBuilder().ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitNull).Build();
            var    watch               = new Stopwatch();
            string serializationFolder = BridgeConfiguration.GetConfig().SerializationFolder;

            //have this driven by config
            var serializationPath = $"{serializationFolder}/content/{contentConfig.Name}";
            var pageTypes         = contentConfig.GetPageTypes();
            var fieldsToIgnore    = contentConfig.GetIgnoreFields();
            var path = contentConfig.Query;

            MultiDocumentQuery docs = DocumentHelper.GetDocuments().Path(path).Types(pageTypes.ToArray()).AllCultures().FilterDuplicates();
            var treeNodes           = docs.ToList <TreeNode>();

            foreach (var treeNode in treeNodes)
            {
                watch.Reset();
                watch.Start();
                var mappedItem = treeNode.Adapt <BridgeTreeNode>();
                mappedItem.FieldValues = new Dictionary <string, object>();

                foreach (string columnName in treeNode.ColumnNames)
                {
                    if (!fieldsToIgnore.Contains(columnName))
                    {
                        var columnValue = treeNode.GetValue(columnName);
                        if (columnValue != null)
                        {
                            mappedItem.FieldValues.Add(columnName, columnValue);
                        }
                    }
                }
                mappedItem.ParentNodeGUID = treeNode?.Parent?.NodeGUID;
                var stringBuilder = new StringBuilder();
                var res           = serializer.Serialize(mappedItem);
                stringBuilder.AppendLine(res);
                var      pathToWriteTo = $"{serializationPath}/{mappedItem.NodeAliasPath}#{mappedItem.DocumentCulture}.yaml";
                var      concretePath  = this.GetRootPath(pathToWriteTo);
                FileInfo file          = new FileInfo(concretePath);
                file.Directory.Create(); // If the directory already exists, this method does nothing.
                File.WriteAllText(concretePath, res);
                watch.Stop();
                byte[] bytes = Encoding.UTF8.GetBytes($"Serialized {contentConfig.Name}: {mappedItem.NodeAliasPath}#{mappedItem.DocumentCulture}.yaml ({mappedItem.NodeGUID}) - {watch.ElapsedMilliseconds}ms");
                stream.Write(bytes, 0, bytes.Length);
                stream.WriteByte(10);
                stream.Flush();
            }
        }
示例#3
0
 public Home()
 {
     this.RequiresAuthentication(HttpContext.Current);
     Get("/index", parameters => {
         var bridgeCoreConfigs    = BridgeConfiguration.GetConfig().CoreConfigs;
         var bridgeContentConfigs = BridgeConfiguration.GetConfig().ContentConfigs;
         var currentRequest       = Request.Url;
         currentRequest.Path      = (ConfigurationManager.AppSettings["BridgeBaseUrl"] ?? "/Admin/BridgeUI").ToString();
         var model = new { coreConfigs = bridgeCoreConfigs, contentConfigs = bridgeContentConfigs, urlBase = currentRequest.ToString() };
         return(View["Index", model]);
     });
     Get("/about", parameters => "Hello from Bridge -|--|-");
     //Get("/{all*}", parameters =>
     //{
     //    //If you are having serious problems hitting anything, uncomment this
     //    var test = Request;
     //    return "catchall";
     //});
 }
        protected override void OnStart(string[] args)
        {
            var config = BridgeConfiguration.GetConfig();

            var presenceServiceEndPoint  = new IPEndPoint(config.InternalServiceBinding.EndPoint.Address, config.PresenceBinding.ServicePort);
            var multicastReceiveEndPoint = new IPEndPoint(config.InternalServiceBinding.EndPoint.Address, config.PresenceBinding.CallbackPort);

            DumpConfig(config, presenceServiceEndPoint);

            bridge = new SquiggleBridge(config.InternalServiceBinding.EndPoint,
                                        config.ExternalServiceBinding.EndPoint,
                                        config.PresenceBinding.MulticastEndPoint,
                                        multicastReceiveEndPoint,
                                        presenceServiceEndPoint);

            foreach (Target target in config.Targets)
            {
                bridge.AddTarget(target.EndPoint);
            }

            bridge.Start();
        }
示例#5
0
 private void _clearTempFolder()
 {
     try
     {
         //just trying to clean up some temp stuff from prev diffs
         string        serializationFolder = BridgeConfiguration.GetConfig().SerializationFolder;
         var           tempRoot            = this.GetRootPath($"{serializationFolder}/temp");
         DirectoryInfo di = new DirectoryInfo(tempRoot);
         foreach (FileInfo file in di.EnumerateFiles())
         {
             file.Delete();
         }
         foreach (DirectoryInfo dir in di.EnumerateDirectories())
         {
             dir.Delete(true);
         }
     }
     catch (Exception ex)
     {
         //keep moving
     }
 }
示例#6
0
        private void _processCoreConfig(BridgeCoreConfig coreConfig, Stream stream)
        {
            string       serializationFolder = BridgeConfiguration.GetConfig().SerializationFolder;
            var          deserializer        = new DeserializerBuilder().Build();
            TreeProvider tree  = new TreeProvider(MembershipContext.AuthenticatedUser);
            var          watch = new Stopwatch();

            //have this driven by config
            var serializationPath    = $"{serializationFolder}/core/{coreConfig.Name}";
            var classTypes           = coreConfig.GetClassTypes();
            var ignoreFields         = coreConfig.GetIgnoreFields();
            var allAllowedChildInfos = new List <AllowedChildClassInfo>();


            int retryCount = 3;

            _processClasses(retryCount, allAllowedChildInfos, coreConfig.Name, stream, deserializer, watch, serializationPath, classTypes, ignoreFields);
            //at this point we should have all children, lets post process these
            foreach (var allowedChildClass in allAllowedChildInfos)
            {
                AllowedChildClassInfoProvider.SetAllowedChildClassInfo(allowedChildClass);
            }
        }
示例#7
0
        public Diff()
        {
            this.RequiresAuthentication(HttpContext.Current);
            Get("/diffcore/{id}", parameters =>
            {
                var response = new Response();

                response.ContentType = "text/plain";
                response.Contents    = stream =>
                {
                    var bridgeCoreConfigs = BridgeConfiguration.GetConfig().CoreConfigs;
                    string configName     = parameters.id;
                    foreach (BridgeCoreConfig coreConfig in bridgeCoreConfigs)
                    {
                        if (configName.ToLower() == coreConfig.Name.ToLower())
                        {
                            _processCoreConfig(coreConfig, stream);
                        }
                    }
                };
                return(response);
            });


            Get("/diffcontent/{id}", parameters =>
            {
                var response = new Response();

                response.ContentType = "text/plain";
                response.Contents    = stream =>
                {
                    var bridgeContentConfigs = BridgeConfiguration.GetConfig().ContentConfigs;
                    string configName        = parameters.id;
                    foreach (BridgeContentConfig contentConfig in bridgeContentConfigs)
                    {
                        if (configName.ToLower() == contentConfig.Name.ToLower())
                        {
                            _processContentConfig(contentConfig, stream);
                        }
                    }
                };
                return(response);
            });

            Get("/viewdiff", parameters =>
            {
                var response = new Response();

                response.ContentType = "text/plain";
                response.Contents    = stream =>
                {
                    var bridgeContentConfigs = BridgeConfiguration.GetConfig().ContentConfigs;
                    string origFolder        = Request.Query["origFolder"];
                    string tempFolder        = Request.Query["tempFolder"];
                    string file = Request.Query["file"];

                    var origPath             = this.GetRootPath($"{origFolder}/{file}");
                    var origYamlFileContents = File.ReadAllText(origPath);
                    var tempPath             = this.GetRootPath($"{tempFolder}/{file}");
                    var tempFileContents     = File.ReadAllText(tempPath);

                    var diffBuilder = new InlineDiffBuilder(new Differ());
                    var diff        = diffBuilder.BuildDiffModel(origYamlFileContents, tempFileContents);

                    foreach (var line in diff.Lines)
                    {
                        string linePrefix = "";
                        string lineSuffix = "";
                        switch (line.Type)
                        {
                        case ChangeType.Inserted:
                            linePrefix = "K <strong>";
                            lineSuffix = "</strong>";
                            break;

                        case ChangeType.Deleted:
                            linePrefix = "F <em>";
                            lineSuffix = "</em>";
                            break;

                        default:
                            linePrefix = "  ";
                            lineSuffix = "";
                            break;
                        }
                        _outputToStream(stream, $"{linePrefix}{line.Text}{lineSuffix}");
                    }
                };
                return(response);
            });
        }
示例#8
0
        private void _processCoreConfig(BridgeCoreConfig coreConfig, Stream stream)
        {
            var    serializer          = new SerializerBuilder().ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitNull).Build();
            string serializationFolder = BridgeConfiguration.GetConfig().SerializationFolder;
            var    watch = new Stopwatch();

            _clearTempFolder();
            watch.Start();
            //have this driven by config
            var serializationPath     = $"{serializationFolder}/core/{coreConfig.Name}";
            var tempGUID              = DateTime.Now.Ticks.ToString();
            var tempSerializationPath = $"{serializationFolder}/temp/{tempGUID}/{coreConfig.Name}";
            var classTypes            = coreConfig.GetClassTypes();
            var fieldsToIgnore        = coreConfig.GetIgnoreFields();

            ProviderHelper.ClearHashtables("cms.class", false);
            foreach (var classType in classTypes)
            {
                var dci = DataClassInfoProvider.GetDataClassInfo(classType);
                if (dci != null)
                {
                    var mappedItem = dci.Adapt <BridgeClassInfo>();
                    mappedItem.FieldValues = new Dictionary <string, object>();

                    foreach (string columnName in dci.ColumnNames)
                    {
                        if (!fieldsToIgnore.Contains(columnName))
                        {
                            var columnValue = dci.GetValue(columnName);
                            mappedItem.FieldValues.Add(columnName, columnValue);
                        }
                    }

                    var assignedSites = new List <Guid>();
                    foreach (SiteInfo assignedSite in dci.AssignedSites)
                    {
                        assignedSites.Add(assignedSite.SiteGUID);
                    }
                    mappedItem.AssignedSites = assignedSites;

                    var allowedChildClasses = AllowedChildClassInfoProvider.GetAllowedChildClasses().Where("ParentClassID", QueryOperator.Equals, dci["ClassID"].ToString()).Column("ChildClassID").ToList();

                    var allowedChildrenTypes = new List <string>();
                    foreach (AllowedChildClassInfo allowedChildClass in allowedChildClasses)
                    {
                        var className = new ObjectQuery("cms.class").Where("ClassID", QueryOperator.Equals, allowedChildClass.ChildClassID).Column("ClassName").FirstOrDefault()["ClassName"].ToString();
                        allowedChildrenTypes.Add(className);
                    }
                    mappedItem.AllowedChildTypes = allowedChildrenTypes;

                    var classQueries = QueryInfoProvider.GetQueries().Where("ClassID", QueryOperator.Equals, dci.ClassID).ToList();
                    var queries      = new Dictionary <string, BridgeClassQuery>();
                    foreach (var classQuery in classQueries)
                    {
                        var bcq = classQuery.Adapt <BridgeClassQuery>();
                        queries.Add(classQuery.QueryName, bcq);
                    }
                    mappedItem.Queries = queries;

                    var stringBuilder = new StringBuilder();
                    var res           = serializer.Serialize(mappedItem);
                    stringBuilder.AppendLine(res);

                    var      pathToMatching = $"{tempSerializationPath}/{mappedItem.ClassName.ToLower()}.yaml";
                    var      tempPath       = this.GetRootPath(pathToMatching);
                    FileInfo file           = new FileInfo(tempPath);
                    file.Directory.Create(); // If the directory already exists, this method does nothing.
                    File.WriteAllText(tempPath, res);
                }
            }
            watch.Stop();
            _outputToStream(stream, $"Generating temp {coreConfig.Name} - {watch.ElapsedMilliseconds}ms");
            _processDifferences(stream, watch, serializationPath, tempSerializationPath);
        }
示例#9
0
        /// <summary>
        /// Take whats in the database and serialize it
        /// </summary>
        public Serialize()
        {
            this.RequiresAuthentication(HttpContext.Current);
            Get("/serializecore/{id}", parameters =>
            {
                var response         = new Response();
                response.ContentType = "text/plain";
                response.Contents    = stream =>
                {
                    var bridgeCoreConfigs = BridgeConfiguration.GetConfig().CoreConfigs;
                    string configName     = parameters.id;
                    foreach (BridgeCoreConfig coreConfig in bridgeCoreConfigs)
                    {
                        if (configName.ToLower() == coreConfig.Name.ToLower())
                        {
                            _processCoreConfig(coreConfig, stream);
                        }
                        byte[] bytes = Encoding.UTF8.GetBytes($"Completed serialize!");
                        stream.Write(bytes, 0, bytes.Length);
                        stream.WriteByte(10);
                        stream.Flush();
                    }
                };

                return(response);
            });

            Get("/serializecore", parameters =>
            {
                var response         = new Response();
                response.ContentType = "text/plain";
                response.Contents    = stream =>
                {
                    var bridgeCoreConfigs = BridgeConfiguration.GetConfig().CoreConfigs;

                    foreach (BridgeCoreConfig coreConfig in bridgeCoreConfigs)
                    {
                        _processCoreConfig(coreConfig, stream);
                    }
                    byte[] bytes = Encoding.UTF8.GetBytes($"Completed serialize!");
                    stream.Write(bytes, 0, bytes.Length);
                    stream.WriteByte(10);
                    stream.Flush();
                };

                return(response);
            });

            Get("/serializecontent/{id}", parameters =>
            {
                var response         = new Response();
                response.ContentType = "text/plain";
                response.Contents    = stream =>
                {
                    var bridgeContentConfigs = BridgeConfiguration.GetConfig().ContentConfigs;
                    string configName        = parameters.id;
                    foreach (BridgeContentConfig contentConfig in bridgeContentConfigs)
                    {
                        if (configName.ToLower() == contentConfig.Name.ToLower())
                        {
                            _processContentConfig(contentConfig, stream);
                        }
                        byte[] bytes = Encoding.UTF8.GetBytes($"Completed serialize!");
                        stream.Write(bytes, 0, bytes.Length);
                        stream.WriteByte(10);
                        stream.Flush();
                    }
                };

                return(response);
            });

            Get("/serializecontent", parameters =>
            {
                var response         = new Response();
                response.ContentType = "text/plain";
                response.Contents    = stream =>
                {
                    var bridgeContentConfigs = BridgeConfiguration.GetConfig().ContentConfigs;
                    foreach (BridgeContentConfig contentConfig in bridgeContentConfigs)
                    {
                        _processContentConfig(contentConfig, stream);
                    }
                    byte[] bytes = Encoding.UTF8.GetBytes($"Completed serialize!");
                    stream.Write(bytes, 0, bytes.Length);
                    stream.WriteByte(10);
                    stream.Flush();
                };

                return(response);
            });
        }
示例#10
0
        private void _processContentConfing(BridgeContentConfig contentConfig, Stream stream)
        {
            string       serializationFolder = BridgeConfiguration.GetConfig().SerializationFolder;
            var          deserializer        = new DeserializerBuilder().Build();
            TreeProvider tree  = new TreeProvider(MembershipContext.AuthenticatedUser);
            var          watch = new Stopwatch();

            var serializationPath = $"{serializationFolder}/content/{contentConfig.Name}";
            var pageTypes         = contentConfig.GetPageTypes();
            var ignoreFields      = contentConfig.GetIgnoreFields();

            var concretePath = this.GetRootPath(serializationPath);
            var yamlFiles    = Directory.EnumerateFiles(concretePath, "*.yaml", SearchOption.AllDirectories);

            foreach (string yamlFile in yamlFiles)
            {
                watch.Reset();
                watch.Start();
                var yamlFileContent = File.ReadAllText(yamlFile);
                var bridgeTreeNode  = deserializer.Deserialize <BridgeTreeNode>(yamlFileContent);
                if (pageTypes.Any(x => x.ToLower() == bridgeTreeNode.ClassName.ToLower()))
                {
                    var treeNode = tree.SelectSingleNode(bridgeTreeNode.NodeGUID, bridgeTreeNode.DocumentCulture, bridgeTreeNode.NodeSiteName);
                    if (treeNode != null)
                    {
                        if (bridgeTreeNode.FieldValues != null)
                        {
                            foreach (var fieldValue in bridgeTreeNode.FieldValues)
                            {
                                if (!ignoreFields.Contains(fieldValue.Key))
                                {
                                    treeNode.SetValue(fieldValue.Key, fieldValue.Value);
                                }
                            }
                            treeNode.Update();
                        }
                    }
                    else
                    {
                        var nonSpecificCultureTreeNode = tree.SelectSingleNode(bridgeTreeNode.NodeGUID, null, bridgeTreeNode.NodeSiteName, true);
                        if (nonSpecificCultureTreeNode != null)
                        {
                            // if we are in here, we have a version of the same page already, make it a culture variant
                            if (bridgeTreeNode.FieldValues != null)
                            {
                                foreach (var fieldValue in bridgeTreeNode.FieldValues)
                                {
                                    if (!ignoreFields.Contains(fieldValue.Key))
                                    {
                                        nonSpecificCultureTreeNode.SetValue(fieldValue.Key, fieldValue.Value);
                                    }
                                }
                            }
                            nonSpecificCultureTreeNode.InsertAsNewCultureVersion(bridgeTreeNode.DocumentCulture);
                        }
                        else
                        {
                            //else, we can assume this is a new page and insert
                            var parentTreeNode = tree.SelectSingleNode(bridgeTreeNode.ParentNodeGUID.GetValueOrDefault(), bridgeTreeNode.DocumentCulture, bridgeTreeNode.NodeSiteName);
                            var newTreeNode    = TreeNode.New(bridgeTreeNode.ClassName, tree);
                            if (bridgeTreeNode.FieldValues != null)
                            {
                                foreach (var fieldValue in bridgeTreeNode.FieldValues)
                                {
                                    if (!ignoreFields.Contains(fieldValue.Key))
                                    {
                                        newTreeNode.SetValue(fieldValue.Key, fieldValue.Value);
                                    }
                                }
                            }
                            newTreeNode.Insert(parentTreeNode);
                        }
                    }
                    byte[] bytes = Encoding.UTF8.GetBytes($"Synced {contentConfig.Name}: {yamlFile.Replace(concretePath, "")} - {watch.ElapsedMilliseconds}ms");
                    stream.Write(bytes, 0, bytes.Length);
                    stream.WriteByte(10);
                    stream.Flush();
                }
                watch.Stop();
            }
        }