//todo: output relationships destination label user id, instead of node id
        private string FailureContext(
            string failureReason,
            IValidateAndRepairItemSyncContext context,
            ContentTypePartDefinition contentTypePartDefinition,
            ContentItem contentItem,
            string partName,
            dynamic partContent)
        {
            return($@"{context.ValidateAndRepairGraph.FailureContext(failureReason, contentItem)}
part type name: '{partName}'
     part name: '{contentTypePartDefinition.Name}'
  part content:
{partContent}
Source Node ------------------------------------
{SourceNodeContext(context.NodeWithRelationships.SourceNode, context.NodeId)}
Outgoing Relationships -------------------------
{string.Join(Environment.NewLine, context.NodeWithRelationships.OutgoingRelationships.Select(or => $"[:{or.Type}]->({or.Id})"))}
Incoming Relationships -------------------------
{string.Join(Environment.NewLine, context.NodeWithRelationships.IncomingRelationships.Select(or => $"[:{or.Type}]->({or.Id})"))}");
        }
Ejemplo n.º 2
0
        public async Task <(bool validated, string failureReason)> ValidateSyncComponent(
            IValidateAndRepairItemSyncContext context)
        {
            foreach (ContentTypePartDefinition contentTypePartDefinition in context.ContentTypeDefinition.Parts)
            {
                IContentPartGraphSyncer?partSyncer = _partSyncers.SingleOrDefault(ps =>
                                                                                  ps.CanSync(contentTypePartDefinition.ContentTypeDefinition.Name,
                                                                                             contentTypePartDefinition.PartDefinition));

                if (partSyncer == null)
                {
                    _logger.LogInformation("No IContentPartGraphSyncer registered to sync/validate {ContentTypeDefinitionName} parts, so ignoring.",
                                           contentTypePartDefinition.ContentTypeDefinition.Name);
                    continue;
                }

                dynamic?partContent = context.ContentItem.Content[contentTypePartDefinition.Name];
                if (partContent == null)
                {
                    continue; //todo: throw??
                }
                // pass as param, rather than context?
                context.ContentTypePartDefinition = contentTypePartDefinition;

                (bool validated, string partFailureReason) = await partSyncer.ValidateSyncComponent(
                    (JObject)partContent, context);

                if (validated)
                {
                    continue;
                }

                string failureReason  = $"{partSyncer.PartName} did not validate: {partFailureReason}";
                string failureContext = FailureContext(failureReason, context, contentTypePartDefinition,
                                                       context.ContentItem, contentTypePartDefinition.PartDefinition.Name, partContent);
                return(false, failureContext);
            }

            return(true, "");
        }
Ejemplo n.º 3
0
        //todo: output relationships destination label user id, instead of node id
        private string FailureContext(
            string failureReason,
            IValidateAndRepairItemSyncContext context,
            ContentTypePartDefinition contentTypePartDefinition,
            ContentItem contentItem,
            string partName,
            dynamic partContent)
        {
            return($@"{context.ValidateAndRepairGraph.FailureContext(failureReason, contentItem)}
part type name: '{partName}'
     part name: '{contentTypePartDefinition.Name}'
  part content:
{partContent}
Source Node ------------------------------------
        ID: {context.NodeWithOutgoingRelationships.SourceNode.Id}
   user ID: {context.NodeId}
    labels: ':{string.Join(":", context.NodeWithOutgoingRelationships.SourceNode.Labels)}'
properties:
{string.Join(Environment.NewLine, context.NodeWithOutgoingRelationships.SourceNode.Properties.Select(p => $"{p.Key} = {(p.Value is IEnumerable<object> values ? string.Join(",", values.Select(v => v.ToString())) : p.Value)}"))}
Relationships ----------------------------------
{string.Join(Environment.NewLine, context.NodeWithOutgoingRelationships.OutgoingRelationships.Select(or => $"[:{or.Relationship.Type}]->({or.DestinationNode.Id})"))}");
        }
Ejemplo n.º 4
0
 public Task <(bool validated, string failureReason)> ValidateSyncComponent(
     IValidateAndRepairItemSyncContext context)
 {
     return(_taxonomyPartGraphSyncer.ValidateSyncComponentForNonLeafEmbeddedTerm((JObject)context.ContentItem.Content, context));
 }