예제 #1
0
        public RelationCriteria GetFromTitle(RelationBetweenEntries relation)
        {
            var sourceTitle      = relation.SourceEntry.Title;
            var targetTitle      = relation.TargetEntry.Title;
            var relationStrategy = relationCriterias.FirstOrDefault(
                s => s.Keywords != null && s.Keywords.Any(k => sourceTitle.ContainsCaseInsensitive(k)));

            if (relationStrategy != null)
            {
                return(relationStrategy);
            }
            relationStrategy = relationCriterias.FirstOrDefault(
                s => s.Keywords != null && s.Keywords.Any(k => targetTitle.ContainsCaseInsensitive(k)));
            return(relationStrategy);
        }
예제 #2
0
        public bool IsRelationValid(RelationBetweenEntries relation)
        {
            var  relationCriteria    = RelationConfiguration.Instance.Get(relation);
            var  relationStrategies  = relationCriteria.Strategies.Select(s => RelationFactory.Instance.Get(s)).ToArray();
            var  isTargetParentStory = relation.TargetForSourceType == Data.Enumerations.RelationType.ParentStory;
            bool areEqual            = true;

            foreach (var relationStrategy in relationStrategies)
            {
                areEqual &= !isTargetParentStory
                    ? relationStrategy.AreRelated(relation.SourceEntry, relation.TargetEntry)
                    : relationStrategy.AreRelated(relation.TargetEntry, relation.SourceEntry);
            }
            return(areEqual);
        }
예제 #3
0
        private RelationBetweenEntries CreateRelation(IEntryInstance entry, IEntryInstance relatedEntry, RelationType relationType)
        {
            if (relationType != RelationType.ParentStory)
            {
                return(new RelationBetweenEntries(entry, relatedEntry, relationType));
            }
            var entryAsRelatedSubItem = relatedEntry.Related.AllRelatedPositions.FirstOrDefault(e => e.MalId == entry.Id);

            if (entryAsRelatedSubItem == null)
            {
                return(new RelationBetweenEntries(entry, relatedEntry, relationType));
            }
            var targetToSourceRelation = entryAsRelatedSubItem.RelationType;
            var relation = new RelationBetweenEntries(entry, relatedEntry, relationType, targetToSourceRelation);

            return(relation);
        }
예제 #4
0
        public RelationCriteria Get(RelationBetweenEntries relation)
        {
            var relationStrategy = GetFromTitle(relation);

            if (relationStrategy != null)
            {
                return(relationStrategy);
            }
            relationStrategy = GetFromType(relation.TargetEntry.Type);
            if (relationStrategy != null)
            {
                return(relationStrategy);
            }
            var isTargetParentStory = relation.TargetForSourceType == RelationType.ParentStory;
            var relationType        = !isTargetParentStory ? relation.TargetForSourceType : relation.SourceForTargetType;

            relationStrategy = GetFromRelation(relationType);
            if (relationStrategy != null)
            {
                return(relationStrategy);
            }
            return(relationCriterias.FirstOrDefault(s => s.Relations != null && s.Relations.Contains(RelationType.None)));
        }