public override List<Relation> GetAllRelations(string rule)
        {
            List<Relation> allRelations = GetAllRelations();

            Timer timer = new Timer("Starting query GetAllRelation for rule '" + rule + "'");
            var relationQuery = (from relations in allRelations
                                 where (relations.RuleName == rule)
                                 select relations);
            List<Relation> result = relationQuery.ToList();
            timer.Stop();
            return result;
        }
        public override List<Relation> GetRelationsForPage(int pageID, Rule rule, Rule.Direction direction)
        {
            List<Relation> allRelations = GetAllRelations();

            string cacheKey = GetCacheKey(pageID, rule.RuleName, direction);
            List<Relation> relationsForPage = (GetFromCache(cacheKey)) as List<Relation>;
            if (relationsForPage != null)
                return relationsForPage;
            Timer timer = new Timer("Query GetRelatedRelations for rule '" + rule.RuleName + "' with page " + pageID);
            switch (direction)
            {
                case Rule.Direction.Both:
                    return GetRelationsForPage(pageID, rule);
                case Rule.Direction.Left:
                    var pageTypeQueryLeft = (from relations in allRelations
                                         where (relations.RuleName == rule.RuleName && (relations.PageIDLeft == pageID))
                                         select relations);
                    relationsForPage = pageTypeQueryLeft.ToList();
                    break;
                case Rule.Direction.Right:
                    var pageTypeQueryRight = (from relations in allRelations
                                         where (relations.RuleName == rule.RuleName && (relations.PageIDRight == pageID))
                                         select relations);
                    relationsForPage = pageTypeQueryRight.ToList();
                    break;
            }

            timer.Stop();
            ValidationFilter(relationsForPage);
            StoreInCache(cacheKey, relationsForPage);
            return relationsForPage;
        }
 public override List<Relation> GetRelationsForPage(int pageID)
 {
     string cacheKey = GetCacheKey(pageID, "", Rule.Direction.Both);
     List<Relation> relationsForPage = (GetFromCache(cacheKey)) as List<Relation>;
     if (relationsForPage != null)
         return relationsForPage;
     Timer timer = new Timer("Query GetRelatedRelations with page " + pageID);
     var pageTypeQuery = (from relations in RelationDataStore.Items<Relation>()
                          where (relations.PageIDLeft == pageID || relations.PageIDRight == pageID)
                          select relations);
     relationsForPage = pageTypeQuery.ToList();
     StoreInCache(cacheKey, relationsForPage);
     timer.Stop();
     return relationsForPage;
 }
        public override List<Relation> GetRelationsForPage(int pageID, Rule rule)
        {
            List<Relation> allRelations = GetAllRelations();

            Timer timer = new Timer("Query GetRelatedRelations for rule '" + rule.RuleName + "' with page " + pageID);
            var pageTypeQuery = (from relations in RelationDataStore.Items<Relation>()
                                 where (relations.RuleName == rule.RuleName && (relations.PageIDLeft == pageID || relations.PageIDRight == pageID))
                                 select relations);

            List<Relation> relationsForPage = pageTypeQuery.ToList();
            timer.Stop();
            ValidationFilter(relationsForPage);
            return relationsForPage;
        }
 public override Relation GetRelation(string rule, int pageLeft, int pageRight)
 {
     List<Relation> allRelations = GetAllRelations();
     Timer timer = new Timer("Starting query GetRelation for rule '" + rule + "' with pages " + pageLeft.ToString() + " and " + pageRight.ToString());
     var pageTypeQuery = (from relations in allRelations
                          where (relations.RuleName == rule && (relations.PageIDLeft == pageLeft && relations.PageIDRight == pageRight) || (relations.PageIDLeft == pageRight && relations.PageIDRight == pageLeft))
                          select relations);
     List<Relation> existingRelations = pageTypeQuery.ToList();
     timer.Stop();
     if (existingRelations != null && existingRelations.Count > 0)
         return existingRelations.First<Relation>();
     else
         return new Relation();
 }