Пример #1
0
        public void SerializeCriteriaGroup()
        {
            var criteriaGroup = new CriteriaGroup {
                Operator = CriteriaGroupOperator.Or
            };

            criteriaGroup.Criterias.Add(new Criteria {
                Field = "Version", Operator = CriteriaOperator.IsEqualTo, Value = 1.0
            });
            criteriaGroup.Criterias.Add(new Criteria {
                Field = "Name", Operator = CriteriaOperator.Contains, Value = "NPatterns"
            });

            var jsonString     = JsonConvert.SerializeObject(criteriaGroup, new StringEnumConverter());
            var criteriaGroup2 = JsonConvert.DeserializeObject <CriteriaGroup>(jsonString, new StringEnumConverter());

            Assert.AreEqual(criteriaGroup.Operator, criteriaGroup2.Operator);
            Assert.AreEqual(criteriaGroup.Criterias.Count, criteriaGroup2.Criterias.Count);
            for (int i = 0; i < criteriaGroup.Criterias.Count; i++)
            {
                var criteria  = criteriaGroup.Criterias[i];
                var criteria2 = criteriaGroup2.Criterias[i];
                Assert.AreEqual(criteria.Field, criteria2.Field);
                Assert.AreEqual(criteria.Operator, criteria2.Operator);
                Assert.AreEqual(criteria.Value, criteria2.Value);
            }
        }
Пример #2
0
        private List <Track> GetValidTracks(CriteriaGroup criteriaGroup)
        {
            if (!criteriaGroup.DiscCriteria.Any() && !criteriaGroup.AlbumCriteria.Any())
            {
                return(_library.Artists
                       .Where(a => criteriaGroup.ArtistCriteria.All(cr => cr.Predicate(a)))
                       .SelectMany(a => a.Tracks)
                       .Where(t => criteriaGroup.TrackCriteria.All(cr => cr.Predicate(t)))
                       .ToList());
            }

            if (!criteriaGroup.ArtistCriteria.Any())
            {
                return(_library.Artists
                       .SelectMany(a => a.Albums)
                       .Where(a => criteriaGroup.AlbumCriteria.All(cr => cr.Predicate(a)))
                       .SelectMany(a => a.Discs)
                       .Where(d => criteriaGroup.DiscCriteria.All(cr => cr.Predicate(d)))
                       .SelectMany(a => a.Tracks)
                       .Where(t => criteriaGroup.TrackCriteria.All(cr => cr.Predicate(t)))
                       .ToList());
            }

            return(_library.Artists
                   .SelectMany(a => a.Albums)
                   .Where(a => criteriaGroup.AlbumCriteria.All(cr => cr.Predicate(a)))
                   .SelectMany(a => a.Discs)
                   .Where(d => criteriaGroup.DiscCriteria.All(cr => cr.Predicate(d)))
                   .SelectMany(a => a.Tracks)
                   .Where(t => criteriaGroup.TrackCriteria.All(cr => cr.Predicate(t)) && criteriaGroup.ArtistCriteria.All(cr => cr.Predicate(t.Artist)))
                   .ToList());
        }
Пример #3
0
 public void HandleDeleteButtonPressed()
 {
     if (CriteriaGroup != null)
     {
         CriteriaGroup.RequestDeletion();
     }
 }
Пример #4
0
        private void AddCriteriaGroupView(CriteriaGroup criteriaGroup, bool ignoreSchemaChange = false)
        {
            var viewGo = Instantiate(CriteriaGroupViewPrefab);
            var view   = viewGo.GetComponent <CriteriaGroupViewBehaviour>();


            // set external schemas
            view.ExternalSchemaProvider = ExternalSchemaProvider;

            view.CriteriaGroup = criteriaGroup;

            view.transform.SetParent(CriteriaGroupAttachmentPoint, false);

            CriteriaGroupViews.Add(view);


            AddGroupButtonWrapperComponent.transform.SetAsLastSibling();

            view.CriteriaChanged += HandleCriteriaGroupChanged;

            if (!ignoreSchemaChange)
            {
                HighlightSelection();
                ComputeSchema();

                ShowNewSchema();
            }
        }
Пример #5
0
 protected BaseFilterBuilder()
 {
     SortCriteria = new List<SortCriterion>();
       FilterCriteria = new CriteriaGroup();
     Skip = 0;
     Take = 10;
 }
Пример #6
0
 protected BaseFilterBuilder()
 {
     SortCriteria   = new List <SortCriterion>();
     FilterCriteria = new CriteriaGroup();
     Skip           = 0;
     Take           = 10;
 }
Пример #7
0
        private CriteriaPlaylist CreateCriteriaPlaylist(XElement playlistXml)
        {
            var id        = int.Parse(playlistXml.Attribute(PlaylistId).Value);
            var title     = playlistXml.Attribute(PlaylistTitle).Value;
            var favourite = playlistXml.Attribute(PlaylistIsFavourite)?.Value == TrueValue;

            var playlist = new CriteriaPlaylist(id, title, favourite);

            var orderByProperty = playlistXml.Attribute(PlaylistOrderBy).Value;

            playlist.OrderByProperty = string.IsNullOrEmpty(orderByProperty)
                ? (PropertyName?)null
                : (PropertyName)Enum.Parse(typeof(PropertyName), orderByProperty);

            playlist.OrderByDescending = playlistXml.Attribute(PlaylistOrderByDescending).Value == TrueValue;

            var maxTracks = playlistXml.Attribute(PlaylistMaxTracks).Value;

            playlist.MaxTracks = string.IsNullOrEmpty(maxTracks)
                ? (int?)null
                : int.Parse(maxTracks);

            playlist.CriteriaGroups = new List <CriteriaGroup>();

            foreach (var criteriaGroupXml in playlistXml.Element(PlaylistCriteriaGroups).Elements(PlaylistCriteriaGroup))
            {
                var criteriaGroup = new CriteriaGroup();

                foreach (var criteriaXml in criteriaGroupXml.Element(PlaylistArtistCriteria).Elements(PlaylistCriteria))
                {
                    criteriaGroup.ArtistCriteria.Add(GetArtistCriteria(criteriaXml));
                }

                foreach (var criteriaXml in criteriaGroupXml.Element(PlaylistAlbumCriteria).Elements(PlaylistCriteria))
                {
                    criteriaGroup.AlbumCriteria.Add(GetAlbumCriteria(criteriaXml));
                }

                foreach (var criteriaXml in criteriaGroupXml.Element(PlaylistDiscCriteria).Elements(PlaylistCriteria))
                {
                    criteriaGroup.DiscCriteria.Add(GetDiscCriteria(criteriaXml));
                }

                foreach (var criteriaXml in criteriaGroupXml.Element(PlaylistTrackCriteria).Elements(PlaylistCriteria))
                {
                    criteriaGroup.TrackCriteria.Add(GetTrackCriteria(criteriaXml));
                }

                if (criteriaGroup.TrackCriteria.Any() ||
                    criteriaGroup.DiscCriteria.Any() ||
                    criteriaGroup.AlbumCriteria.Any() ||
                    criteriaGroup.ArtistCriteria.Any())
                {
                    playlist.CriteriaGroups.Add(criteriaGroup);
                }
            }

            return(playlist);
        }
Пример #8
0
        public CriteriaGroupViewModel(CriteriaGroup crg)
        {
            Contract.Requires(crg != null);

            critgr            = crg;
            validatableEntity = critgr;

            critgr.PropertyChanged += model_PropertyChanged;
        }
        public void Show(CriteriaGroup group)
        {
            Group = group;

            if (Group == null)
            {
                Visible = false;
                return;
            }

            Visible = true;
        }
Пример #10
0
        public void ExecuteDynamicQueryObject()
        {
            var source = new List <Product>
            {
                new Product {
                    Name = "NPatterns", Version = 1.2
                },
                new Product {
                    Name = "NPatterns.Messaging.IoC", Version = 1.1
                },
                new Product {
                    Name = "NPatterns.ObjectRelational.EF", Version = 1.0
                },
                new Product {
                    Name = null, Version = 0
                }
            };

            var query = new QueryObject(new DynamicQueryObjectExecutor());

            query.Add(new Criteria {
                Field = "Name", Operator = CriteriaOperator.IsNotNull
            });

            var criteriaGroup = new CriteriaGroup {
                Operator = CriteriaGroupOperator.Or
            };

            criteriaGroup.Criterias.Add(new Criteria {
                Field = "Name", Operator = CriteriaOperator.IsEqualTo, Value = "npatterns"
            });
            criteriaGroup.Criterias.Add(new Criteria {
                Field = "Name", Operator = CriteriaOperator.EndsWith, Value = "ioc"
            });

            query.Add(criteriaGroup);
            query.Add(new SortDescription {
                Field = "Version", Direction = SortDirection.Ascending
            });

            var result = query.Execute(source.AsQueryable()).ToList();

            Assert.AreEqual(2, result.Count);
            Assert.IsTrue(result[0].Version < result[1].Version);

            query.Add(new Criteria {
                Field = "Version", Operator = CriteriaOperator.IsEqualTo, Value = 1.0
            }, CriteriaGroupOperator.Or);
            var result2 = query.Execute(source.AsQueryable()).ToList();

            Assert.AreEqual(3, result2.Count);
        }
Пример #11
0
        public void CrGroup2Criterion()
        {
            var gr = new CriteriaGroup();
            var cr = gr.AddCriterion();

            Assert.AreEqual(cr, gr.Criteria.Single());
            Assert.AreEqual(gr, cr.Group);

            gr.RemoveCriterion(cr);

            Assert.IsFalse(gr.Criteria.Contains(cr));
            Assert.IsNull(cr.Group);
        }
Пример #12
0
        private CriteriaPlaylist CreatePlaylist(CriteriaPlaylist playlist = null)
        {
            if (playlist == null)
            {
                playlist = new CriteriaPlaylist(0, "", false);
            }

            playlist.Title             = PlaylistTitle;
            playlist.OrderByProperty   = OrderByProperty;
            playlist.OrderByDescending = OrderByDescending;
            playlist.MaxTracks         = MaxTracks;

            playlist.CriteriaGroups.Clear();

            foreach (var group in Criteria.Where(g => g.Criteria.Any()))
            {
                var criteriaGroup = new CriteriaGroup();

                foreach (var criteria in group.Criteria.Where(g => g.PropertyName != null))
                {
                    switch (criteria.PropertyOwner)
                    {
                    case PropertyOwner.Track:
                        criteriaGroup.TrackCriteria.Add(_trackCriteriaService.GetTrackCriteria(criteria.PropertyName.Value, criteria.CriteriaType.Value, criteria.ValueString));
                        break;

                    case PropertyOwner.Disc:
                        criteriaGroup.DiscCriteria.Add(_trackCriteriaService.GetDiscCriteria(criteria.PropertyName.Value, criteria.CriteriaType.Value, criteria.ValueString));
                        break;

                    case PropertyOwner.Album:
                        criteriaGroup.AlbumCriteria.Add(_trackCriteriaService.GetAlbumCriteria(criteria.PropertyName.Value, criteria.CriteriaType.Value, criteria.ValueString));
                        break;

                    case PropertyOwner.Artist:
                        criteriaGroup.ArtistCriteria.Add(_trackCriteriaService.GetArtistCriteria(criteria.PropertyName.Value, criteria.CriteriaType.Value, criteria.ValueString));
                        break;

                    default:
                        throw new InvalidOperationException("Invalid property owner");
                    }
                }

                playlist.CriteriaGroups.Add(criteriaGroup);
            }

            return(playlist);
        }
Пример #13
0
        public CriteriaGroupEditorViewModel(CriteriaGroup group)
        {
            this.crgroup = group;

            Criteria = new ObservableCollection <CriterionEditorViewModel>();

            CriteriaGroup = new CriteriaGroupViewModel(crgroup);
            tester        = new ExistanceTester <CriteriaGroup>(crgroup, CriteriaGroup, Session);
            tester.Test();

            (crgroup as IEditableObject).BeginEdit();

            Title          = "Редактор группы критериев";
            HelpTopic      = "";
            WithHelpButton = false;
        }
Пример #14
0
        private void Build(StringBuilder builder, CriteriaGroupOperator op, CriteriaGroup criteriaGroup)
        {
            var sb = new StringBuilder();

            foreach (var criteria in criteriaGroup.Criterias)
            {
                Build(sb, criteriaGroup.Operator, criteria);
            }

            if (sb.Length == 0)
            {
                return;
            }

            if (builder.Length > 0)
            {
                builder.AppendFormat(" {0} ", op);
            }

            builder.AppendFormat("({0})", sb);
        }
Пример #15
0
        private void RemoveCriteriaGroupView(CriteriaGroup criteriaGroup, bool ignoreSchemaChange = false)
        {
            var view = CriteriaGroupViews.FirstOrDefault(v => v.CriteriaGroup == criteriaGroup);

            if (view == null)
            {
                return;
            }

            Destroy(view.gameObject);

            CriteriaGroupViews.Remove(view);

            view.CriteriaChanged -= HandleCriteriaGroupChanged;

            if (!ignoreSchemaChange)
            {
                HighlightSelection();
                ComputeSchema();

                ShowNewSchema();
            }
        }
 public void Hide()
 {
     Group   = null;
     Visible = false;
 }
Пример #17
0
        private void Build(StringBuilder builder, CriteriaGroupOperator op, Criteria criteria)
        {
            var property = GetPropertyInfo(typeof(T), criteria.Field);

            if (property == null)
            {
                return;
            }

            int valueIndex = _values.Count;

            if (criteria.Operator != CriteriaOperator.IsContainedIn &&
                criteria.Operator != CriteriaOperator.IsNotContainedIn)
            {
                if (builder.Length > 0)
                {
                    builder.AppendFormat(" {0} ", op);
                }

                if (criteria.Operator != CriteriaOperator.IsNull &&
                    criteria.Operator != CriteriaOperator.IsNotNull)
                {
                    criteria.Value = ConvertEx.ChangeType(criteria.Value, property.PropertyType);
                    _values.Add(criteria.Value);
                }
            }

            switch (criteria.Operator)
            {
            case CriteriaOperator.IsContainedIn:
            {
                var q =
                    from z in
                    criteria.Value.ToString().Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
                    select
                    new Criteria {
                    Field = criteria.Field, Operator = CriteriaOperator.IsEqualTo, Value = z.Trim()
                };

                var group = new CriteriaGroup {
                    Operator = CriteriaGroupOperator.Or, Criterias = q.ToList()
                };

                Build(builder, op, group);
            }
            break;

            case CriteriaOperator.IsNotContainedIn:
            {
                var q =
                    from z in
                    criteria.Value.ToString().Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
                    select
                    new Criteria {
                    Field = criteria.Field, Operator = CriteriaOperator.IsNotEqualTo, Value = z.Trim()
                };

                var group = new CriteriaGroup {
                    Operator = CriteriaGroupOperator.And, Criterias = q.ToList()
                };

                Build(builder, op, group);
            }
            break;

            default:
                var format = GetFormat(criteria.Operator, property.PropertyType);
                if (!string.IsNullOrEmpty(format))
                {
                    builder.AppendFormat(format, criteria.Field, valueIndex);
                }
                break;
            }
        }
Пример #18
0
 public void Add(CriteriaGroup criteriaGroup, CriteriaGroupOperator op = CriteriaGroupOperator.And)
 {
     Build(_predicate, op, criteriaGroup);
 }
Пример #19
0
 private void HandlePayloadExpressionCriteriaGroupRemoved(CriteriaGroup criteriaGroup)
 {
     RemoveCriteriaGroupView(criteriaGroup);
 }
Пример #20
0
 public void ShowAddCriterionStatementDialog(CriteriaGroup group)
 {
     AddCriterionStatementDialog.Show(group);
 }
        /// <summary>
        /// Creates a segment with criteria
        /// </summary>
        public static void CreateSegment()
        {
            var personalizationManager = PersonalizationManager.GetManager();
            using (new ElevatedModeRegion(personalizationManager))
            {
                if (!personalizationManager.GetSegments().Any(s => s.Id == Installer.segmentId))
                {
                    var segment = personalizationManager.CreateSegment(Installer.segmentId);
                    segment.Name = "Weekend segment";
                    segment.Description = "Pages will be personalized according to the day of the week";
                    segment.IsActive = true;
                    CriteriaGroup group = new CriteriaGroup();

                    Criterion saturdayCriterion = new Criterion();
                    saturdayCriterion.CriterionValue = ((int)DayOfWeek.Saturday).ToString();
                    saturdayCriterion.CriterionDisplayValue = Res.Get<CustomPersonalizationResources>().Saturday;
                    saturdayCriterion.CriterionName = Res.Get<CustomPersonalizationResources>().Day;
                    saturdayCriterion.CriterionTitle = Res.Get<CustomPersonalizationResources>().Day;

                    Criterion sundayCriterion = new Criterion();
                    sundayCriterion.CriterionValue = ((int)DayOfWeek.Sunday).ToString();
                    sundayCriterion.CriterionDisplayValue = Res.Get<CustomPersonalizationResources>().Sunday;
                    sundayCriterion.CriterionName = Res.Get<CustomPersonalizationResources>().Day;
                    sundayCriterion.CriterionTitle = Res.Get<CustomPersonalizationResources>().Day;

                    group.Criteria.Add(saturdayCriterion);
                    group.Criteria.Add(sundayCriterion);
                    segment.CriteriaGroups.Add(group);
                    personalizationManager.SaveChanges();
                }
            }
        }
Пример #22
0
        internal static Filter <TFilterable> BuildWhere <TFilterable>(this Filter <TFilterable> filter, CriteriaGroup criteriaGroup) where TFilterable : class, IFilterable
        {
            if (criteriaGroup.CompoundFilterTypes.Any())
            {
                filter.SqlQueryStringBuilder.SafeSqlAppend("(");

                for (var i = 0; i < criteriaGroup.Criteria.Count; i++)
                {
                    if (i != 0)
                    {
                        filter.SqlQueryStringBuilder.SafeSqlAppend(criteriaGroup.CompoundFilterTypes[i - 1].ToString().ToUpper(CultureInfo.InvariantCulture));
                    }

                    var nestedCriteriaGroup = criteriaGroup.Criteria[i] as CriteriaGroup;
                    if (nestedCriteriaGroup != null)
                    {
                        filter.BuildWhere(nestedCriteriaGroup);
                    }
                    else
                    {
                        filter.BuildWhere(criteriaGroup.Criteria[i]);
                    }
                }

                filter.SqlQueryStringBuilder.SafeSqlAppend(")");
            }
            else if (criteriaGroup.Criteria.Any())
            {
                var nestedCriteriaGroup = criteriaGroup.Criteria[0] as CriteriaGroup;
                if (nestedCriteriaGroup != null)
                {
                    filter.BuildWhere(nestedCriteriaGroup);
                }
                else
                {
                    filter.BuildWhere(criteriaGroup.Criteria[0]);
                }
            }

            return(filter);
        }
Пример #23
0
        public void ExecuteDynamicQueryObjectWithComplexType()
        {
            var source = new List <ProductFeature>
            {
                new ProductFeature
                {
                    Product = new Product {
                        Name = "NPatterns", Version = 1.2
                    },
                    Feature = new Feature {
                        Name = "IUnitOfWork"
                    }
                },
                new ProductFeature
                {
                    Product = new Product {
                        Name = "NPatterns.Messaging.IoC", Version = 1.1
                    },
                    Feature = new Feature {
                        Name = "MessageBus"
                    }
                },
                new ProductFeature
                {
                    Product = new Product {
                        Name = "NPatterns.ObjectRelational.EF", Version = 1.0
                    },
                    Feature = new Feature {
                        Name = "UnitOfWork"
                    }
                },
                new ProductFeature
                {
                    Product = new Product(),
                    Feature = new Feature()
                }
            };

            var query = new QueryObject(new DynamicQueryObjectExecutor());

            query.Add(new Criteria {
                Field = "Product.Name", Operator = CriteriaOperator.IsNotNull
            });

            var criteriaGroup = new CriteriaGroup {
                Operator = CriteriaGroupOperator.Or
            };

            criteriaGroup.Criterias.Add(new Criteria {
                Field = "Product.Name", Operator = CriteriaOperator.IsEqualTo, Value = "npatterns"
            });
            criteriaGroup.Criterias.Add(new Criteria {
                Field = "Product.Name", Operator = CriteriaOperator.EndsWith, Value = "ioc"
            });

            query.Add(criteriaGroup);
            var result = query.Execute(source.AsQueryable()).ToList();

            Assert.AreEqual(2, result.Count);

            query.Add(new Criteria {
                Field = "Product.Version", Operator = CriteriaOperator.IsEqualTo, Value = 1.0
            }, CriteriaGroupOperator.Or);
            var result2 = query.Execute(source.AsQueryable()).ToList();

            Assert.AreEqual(3, result2.Count);
        }
Пример #24
0
        private static void Main(string[] args)
        {
            // TODO: Fill in the values for the first three parameters in the StarRezApiClient constructor
            //		 The "/services" in the URL is optional
            StarRezApiClient client = new StarRezApiClient("https://www.server.com/", "Username", "Password");

            // Create a "template" for an entry object, with defaults from the database
            var entry = client.CreateDefault("Entry");

            // Fill in the property values
            entry.NameLast  = "Nurk";
            entry.NameFirst = "Fred";
            entry.NameTitle = "Mr";
            entry.DOB       = new DateTime(1975, 3, 5);

            // Create the entry in the database, getting the EntryID back
            int entryID = client.Create(entry);

            // select back out the entry, getting back the full details, and also getting the EntryAddress details
            entry = client.Select("Entry", entryID, includeLookupCaptions: true, relatedTables: new[] { "EntryAddress" });

            // Write out some info
            Console.WriteLine("Created a new entry with the following details:");
            Console.WriteLine("Name: " + entry.NameFirst + " " + entry.NameLast + " (" + entry.NamePreferred + ")");
            Console.WriteLine("Date of Birth: " + entry.DOB);
            Console.WriteLine("First email address: " + entry.EntryAddress[0].Email);

            // When we specify "includeLookupCaptions", any ID field in the table will have a corresponding "_Caption" field
            Console.WriteLine("Category: " + entry.CategoryID_Caption);

            // update a field of the entry
            entry.NamePreferred = "Frederick";

            // we can also update a field in another table, if we selected it out
            entry.EntryAddress[0].Email = "*****@*****.**";

            // save the changes to the database
            bool result = client.Update(entry);

            if (result)
            {
                Console.WriteLine("Successfully updated entry");
            }
            else
            {
                Console.WriteLine("Failed to update entry record. Result: " + client.LastResult.ToString());
            }

            // Reselect to get the new data, and redisplay
            entry = client.Select("Entry", entryID, relatedTables: new[] { "EntryAddress" });
            Console.WriteLine("Name: " + entry.NameFirst + " " + entry.NameLast + " (" + entry.NamePreferred + ")");
            Console.WriteLine("First email address: " + entry.EntryAddress[0].Email);

            // see if there are any other Nurks in the database
            var entries = client.Select("Entry", Criteria.Equals("NameLast", "Nurk"));

            Console.WriteLine("There are " + entries.Length + " nurks in the database.");

            // what about Smiths or Jones'?
            entries = client.Select("Entry", CriteriaGroup.Or(
                                        Criteria.Equals("NameLast", "Smith"),
                                        Criteria.Equals("NameLast", "Jones")
                                        )
                                    );
            // CriteriaGroups can also take other CriteriaGroups, to nest Ands and Ors as required.
            // CriteriaGroups and Criterias can also be created in the traditional manner, with "new"
            Console.WriteLine("There are " + entries.Length + " smiths and jones' in the database.");

            // delete the entry, to clean up the database
            result = client.Delete(entry);
            if (result)
            {
                Console.WriteLine("Successfully deleted entry");
            }
            else
            {
                Console.WriteLine("Failed to delete entry record. Result: " + client.LastResult.ToString());
            }
            Console.WriteLine("Press enter to continue.");
            Console.ReadLine();
        }
Пример #25
0
 private void HandlePayloadExpressionCriteriaGroupAdded(CriteriaGroup criteriaGroup)
 {
     AddCriteriaGroupView(criteriaGroup);
 }