Example #1
0
        public void BuildCmFilter2()
        {
            // Setup test values
            Cache.LangProject.PeopleOA = Cache.ServiceLocator.GetInstance <ICmPossibilityListFactory>().Create();
            ICmPossibility person1 = Cache.ServiceLocator.GetInstance <ICmPersonFactory>().Create();

            Cache.LangProject.PeopleOA.PossibilitiesOS.Add(person1);
            person1.ForeColor = 5;
            person1.BackColor = 10;

            // Setup filter
            ILcmOwningCollection <ICmFilter> filtersCol = Cache.LangProject.FiltersOC;
            ICmFilter filter = Cache.ServiceLocator.GetInstance <ICmFilterFactory>().Create();

            filtersCol.Add(filter);
            filter.ColumnInfo = CmPossibilityTags.kClassId + "," + CmPossibilityTags.kflidForeColor
                                + "|" + CmPossibilityTags.kClassId + "," + CmPossibilityTags.kflidBackColor;
            ICmRow row = Cache.ServiceLocator.GetInstance <ICmRowFactory>().Create();

            filter.RowsOS.Add(row);
            ICmCell cell1 = Cache.ServiceLocator.GetInstance <ICmCellFactory>().Create();

            row.CellsOS.Add(cell1);
            cell1.Contents = MakeString("= 5");
            ICmCell cell2 = Cache.ServiceLocator.GetInstance <ICmCellFactory>().Create();

            row.CellsOS.Add(cell2);
            cell2.Contents = MakeString("= 10");

            // Check the result
            filter.InitCriteria();
            Assert.IsTrue(filter.MatchesCriteria(person1.Hvo));
        }
Example #2
0
        /// ------------------------------------------------------------------------------------
        /// <summary>
        /// Implement CreateTestData, called by InMemoryLcmTestBase set up.
        /// </summary>
        /// ------------------------------------------------------------------------------------
        protected override void CreateTestData()
        {
            var servloc = Cache.ServiceLocator;

            ICmPossibilityFactory possibilityFactory = servloc.GetInstance <ICmPossibilityFactory>();

            // Add an annotation category (for Discourse)
            m_categoryDiscourse = possibilityFactory.Create();
            var affixCatList = servloc.GetInstance <ICmPossibilityListFactory>().Create();

            Cache.LangProject.AffixCategoriesOA = affixCatList;
            affixCatList.PossibilitiesOS.Add(m_categoryDiscourse);

            // Add an annotation category (for Grammar)
            m_categoryGrammar = possibilityFactory.Create();
            affixCatList.PossibilitiesOS.Add(m_categoryGrammar);

            // add a sub-annotation category (for "Pronominal reference")
            m_categoryGrammar_PronominalRef = possibilityFactory.Create();
            m_categoryGrammar.SubPossibilitiesOS.Add(m_categoryGrammar_PronominalRef);

            // Set up a filter, with a CmCell we can test on.
            ICmFilter filter = servloc.GetInstance <ICmFilterFactory>().Create();

            Cache.LangProject.FiltersOC.Add(filter);
            ICmRow row = servloc.GetInstance <ICmRowFactory>().Create();

            filter.RowsOS.Add(row);
            m_cell = servloc.GetInstance <ICmCellFactory>().Create();
            row.CellsOS.Add(m_cell);
        }
Example #3
0
        public void GreaterThanOrEqual()
        {
            // Setup test values
            Cache.LangProject.PeopleOA = new CmPossibilityList();
            ICmPossibility person1 = Cache.LangProject.PeopleOA.PossibilitiesOS.Append(new CmPerson());

            person1.ForeColor = 4;
            ICmPossibility person2 = Cache.LangProject.PeopleOA.PossibilitiesOS.Append(new CmPerson());

            person2.ForeColor = 5;
            ICmPossibility person3 = Cache.LangProject.PeopleOA.PossibilitiesOS.Append(new CmPerson());

            person3.ForeColor = 10;

            // Setup filter
            FdoOwningCollection <ICmFilter> filtersCol = Cache.LangProject.FiltersOC;
            ICmFilter filter = filtersCol.Add(new CmFilter());

            filter.ColumnInfo = CmPossibility.kClassId + "," + (int)CmPossibility.CmPossibilityTags.kflidForeColor;
            ICmRow  row   = filter.RowsOS.Append(new CmRow());
            ICmCell cell1 = row.CellsOS.Append(new DummyCmCell());

            cell1.Contents.Text = ">= 5";

            // Check the result
            ((CmFilter)filter).InitCriteria();
            Assert.IsFalse(((CmFilter)filter).MatchesCriteria(person1.Hvo));
            Assert.IsTrue(((CmFilter)filter).MatchesCriteria(person2.Hvo));
            Assert.IsTrue(((CmFilter)filter).MatchesCriteria(person3.Hvo));
        }
Example #4
0
        /// ------------------------------------------------------------------------------------
        /// <summary>
        /// Initialize the filter so it can check for matches. This must be called once before
        /// calling <see cref="MatchesCriteria"/>.
        /// </summary>
        /// ------------------------------------------------------------------------------------
        public void InitCriteria()
        {
            lock (SyncRoot)
            {
                m_filteredFieldTypes.Clear();
                m_filteredFlids.Clear();
                m_cells.Clear();

                // Get the filter's essential details
                string[] columns = ColumnInfo.Split('|');

                ICmRow row = RowsOS[0];
                for (int i = 0; i < row.CellsOS.Count; i++)
                {
                    string[] columnInfo = columns[i].Split(new char[] { ',' }, 2);
                    m_filteredFlids.Add(Int32.Parse(columnInfo[1]));
                    m_filteredFieldTypes.Add((CellarPropertyType)m_cache.MetaDataCache.GetFieldType(m_filteredFlids[i]));
                    ICmCell tempCell = row.CellsOS[i];
                    m_cells.Add(tempCell);

                    // Determine the field value this filter wants to match
                    switch (m_filteredFieldTypes[i])
                    {
                    case CellarPropertyType.Integer:
                        // ENHANCE: Someday handle prompting user
                        Debug.Assert(ShowPrompt == 0, "Can't prompt for int values yet.");
                        tempCell.ParseIntegerMatchCriteria();
                        break;

                    case CellarPropertyType.ReferenceAtomic:
                    case CellarPropertyType.ReferenceSequence:
                    case CellarPropertyType.ReferenceCollection:
                        InitReferenceCriteria(tempCell, m_filteredFlids[i]);
                        break;

                    default:
                        throw new Exception("Attempt to filter on unexpected type of field.");
                    }
                }
            }
        }