コード例 #1
0
        public static string ConvertFilterTermToString(FilterTerm filter)
        {
            string f;

            switch (filter)
            {
            case FilterTerm.EqualTo:
            case FilterTerm.NotEqualTo:
                f = "=";
                break;

            case FilterTerm.GreaterThan:
                f = "<";
                break;

            case FilterTerm.LessThan:
                f = ">";
                break;

            default:
                throw new NotImplementedException();
            }

            return(f);
        }
コード例 #2
0
            /// <summary>
            /// Returns an Entity of Type T with the given ID or null if the ID is invalid
            /// </summary>
            /// <typeparam name="T">Entity Type to retrieve</typeparam>
            /// <param name="displayID">DisplayID of the Entity to retrieve</param>
            /// <returns>an instance of an Entity of Type T or null if ID is invalid</returns>
            public T GetByDisplayID <T>(string displayID) where T : ProjectAsset
            {
                var assetTypeToken   = GetAssetTypeToken(typeof(T));
                var projectAssetType = instance.MetaModel.GetAssetType(assetTypeToken);
                var idDef            = projectAssetType.GetAttributeDefinition("Number");

                var query  = new Query(projectAssetType);
                var idTerm = new FilterTerm(idDef);

                idTerm.Equal(displayID);
                query.Filter = idTerm;

                var result = instance.Services.Retrieve(query);

                if (result.Assets.Count == 0)
                {
                    return(null);
                }

                var asset = result.Assets[0];

                // need to validate here to make sure the DisplayID is for the proper type
                // This is a problem with Epics and Stories.
                return(instance.wrapperManager.Create <T>(asset.Oid.Token, true));
            }
コード例 #3
0
        public void Complex2()
        {
            var termA = new FilterTerm(WorkitemToDo);

            termA.Greater(5);

            var termB = new FilterTerm(WorkitemToDo);

            termB.Less(10);

            var termC = new FilterTerm(WorkitemToDo);

            termC.GreaterOrEqual(20);

            var termD = new FilterTerm(WorkitemToDo);

            termD.LessOrEqual(30);

            var and1 = new AndFilterTerm(termA, termB);
            var and2 = new AndFilterTerm(termC, termD);

            var o = new OrFilterTerm(and1, and2);

            Assert.AreEqual("((Workitem.ToDo>'5';Workitem.ToDo<'10')|(Workitem.ToDo>='20';Workitem.ToDo<='30'))",
                            o.Token);
        }
コード例 #4
0
        protected string CheckForDuplicateIterationByName(string ScheduleOID, string Name)
        {
            IAssetType assetType = _metaAPI.GetAssetType("Timebox");
            Query      query     = new Query(assetType);

            IAttributeDefinition scheduleAttribute = assetType.GetAttributeDefinition("Schedule");

            query.Selection.Add(scheduleAttribute);
            FilterTerm scheduleFilter = new FilterTerm(scheduleAttribute);

            scheduleFilter.Equal(GetNewAssetOIDFromDB(ScheduleOID));

            IAttributeDefinition nameAttribute = assetType.GetAttributeDefinition("Name");

            query.Selection.Add(nameAttribute);
            FilterTerm nameFilter = new FilterTerm(nameAttribute);

            nameFilter.Equal(Name);

            query.Filter = new AndFilterTerm(scheduleFilter, nameFilter);
            QueryResult result = _dataAPI.Retrieve(query);

            if (result.TotalAvaliable > 0)
            {
                return(result.Assets[0].Oid.Token.ToString());
            }
            else
            {
                return(null);
            }
        }
コード例 #5
0
        internal static string GetAssetIDFromName(string AssetType, string Name, IMetaModel MetaAPI, IServices DataAPI)
        {
            IAssetType           assetType     = MetaAPI.GetAssetType(AssetType);
            Query                query         = new Query(assetType);
            IAttributeDefinition nameAttribute = assetType.GetAttributeDefinition("Name");
            FilterTerm           term          = new FilterTerm(nameAttribute);

            term.Equal(Name);
            query.Filter = term;

            QueryResult result;

            try
            {
                result = DataAPI.Retrieve(query);
            }
            catch
            {
                return(String.Empty);
            }

            if (result.TotalAvaliable > 0)
            {
                return(result.Assets[0].Oid.Token);
            }
            else
            {
                return(String.Empty);
            }
        }
コード例 #6
0
        public static string ConvertFilterDictionaryToString(FilterTerm filter)
        {
            string        firstKey = dictionary.Keys.ToArray()[0];
            StringBuilder sb       = new StringBuilder();

            foreach (string s in dictionary.Keys)
            {
                foreach (FilterObject j in dictionary[s])
                {
                    if (j.filterTerm == filter)
                    {
                        if (sb.Length > 0)
                        {
                            sb.Append(" or ");
                        }

                        sb.Append(HelperFunctions.FilterByString(s, j.stringFilterTerm, j.valueToFilterOn));
                    }
                }
            }

            if (sb.Length == 0)
            {
                return(null);
            }
            else
            {
                return(sb.ToString());
            }
        }
コード例 #7
0
        protected Object GetSingleListValue(VersionOne.SDK.APIClient.Attribute attribute)
        {
            if (attribute.Value != null && attribute.Value.ToString() != "NULL")
            {
                IAssetType assetType = _metaAPI.GetAssetType("List");
                Query      query     = new Query(assetType);

                IAttributeDefinition assetIDAttribute = assetType.GetAttributeDefinition("ID");
                query.Selection.Add(assetIDAttribute);

                IAttributeDefinition nameAttribute = assetType.GetAttributeDefinition("Name");
                query.Selection.Add(nameAttribute);

                FilterTerm assetName = new FilterTerm(assetIDAttribute);
                assetName.Equal(attribute.Value.ToString());
                query.Filter = assetName;

                QueryResult result = _dataAPI.Retrieve(query);
                return(result.Assets[0].GetAttribute(nameAttribute).Value.ToString());
            }
            else
            {
                return(DBNull.Value);
            }
        }
コード例 #8
0
        public GroupFilterTerm GetFilter(IAssetType type)
        {
            var terms = new List <IFilterTerm>();

            foreach (var value in values)
            {
                var term = new FilterTerm(type.GetAttributeDefinition(Name));

                switch (value.Action)
                {
                case FilterValuesActions.Equal:
                    term.Equal(value.Value);
                    break;

                case FilterValuesActions.NotEqual:
                    term.NotEqual(value.Value);
                    break;

                case FilterValuesActions.Greater:
                    term.Greater(value.Value);
                    break;

                default:
                    throw new NotSupportedException();
                }

                terms.Add(term);
            }

            return(Operation == FilterActions.And ? (GroupFilterTerm) new AndFilterTerm(terms.ToArray()) : new OrFilterTerm(terms.ToArray()));
        }
コード例 #9
0
        private Query GetPropertyValuesQuery(string propertyName, out IAttributeDefinition nameDef)
        {
            IAssetType assetType;

            try {
                assetType = services.Meta.GetAssetType(propertyName);
            } catch (MetaException ex) {
                throw new AssetTypeException(string.Format("{0} is unknown asset type.", propertyName), ex);
            }

            nameDef = assetType.GetAttributeDefinition("Name");

            IAttributeDefinition inactiveDef;
            var query = new Query(assetType);

            query.Selection.Add(nameDef);

            if (assetType.TryGetAttributeDefinition("Inactive", out inactiveDef))
            {
                var filter = new FilterTerm(inactiveDef);
                filter.Equal("False");
                query.Filter = filter;
            }

            query.OrderBy.MajorSort(assetType.DefaultOrderBy, OrderBy.Order.Ascending);
            return(query);
        }
コード例 #10
0
        public void Complex1()
        {
            var termA = new FilterTerm(WorkitemParent);

            termA.Equal(Oid.FromToken("Theme:5", Meta));
            termA.Equal(Oid.FromToken("Theme:6", Meta));

            var termB = new FilterTerm(WorkitemScope);

            termB.Equal(Oid.FromToken("Scope:0", Meta));

            var termC = new FilterTerm(WorkitemParent);

            termC.NotEqual(Oid.FromToken("Theme:7", Meta));
            termC.NotEqual(Oid.FromToken("Theme:8", Meta));

            var termD = new FilterTerm(WorkitemScope);

            termD.NotEqual(Oid.FromToken("Scope:1", Meta));

            var and1 = new AndFilterTerm(termA, termB);
            var and2 = new AndFilterTerm(termC, termD);

            var o = new OrFilterTerm(and1, and2);

            Assert.AreEqual(
                "((Workitem.Parent='Theme%3a5','Theme%3a6';Workitem.Scope='Scope%3a0')|(Workitem.Parent!='Theme%3a7','Theme%3a8';Workitem.Scope!='Scope%3a1'))",
                o.Token);
        }
コード例 #11
0
        /// <summary>
        /// Get collection of reference fields for asset type.
        /// </summary>
        /// <param name="assetTypeToken">AssetType token</param>
        public List <string> GetReferenceFieldList(string assetTypeToken)
        {
            var attributeDefinitionAssetType = services.Meta.GetAssetType("AttributeDefinition");

            var nameAttributeDef          = attributeDefinitionAssetType.GetAttributeDefinition("Name");
            var assetNameAttributeDef     = attributeDefinitionAssetType.GetAttributeDefinition("Asset.AssetTypesMeAndDown.Name");
            var isCustomAttributeDef      = attributeDefinitionAssetType.GetAttributeDefinition("IsCustom");
            var attributeTypeAttributeDef = attributeDefinitionAssetType.GetAttributeDefinition("AttributeType");

            var assetTypeTerm = new FilterTerm(assetNameAttributeDef);

            assetTypeTerm.Equal(assetTypeToken);

            var isCustomTerm = new FilterTerm(isCustomAttributeDef);

            isCustomTerm.Equal("true");

            var attributeTypeTerm = new FilterTerm(attributeTypeAttributeDef);

            attributeTypeTerm.Equal("Text");

            var result = GetFieldList(new AndFilterTerm(assetTypeTerm, isCustomTerm, attributeTypeTerm), new List <IAttributeDefinition> {
                nameAttributeDef
            });
            var fieldList = new List <string>();

            result.ForEach(x => fieldList.Add(x.GetAttribute(nameAttributeDef).Value.ToString()));

            return(fieldList);
        }
コード例 #12
0
        public void HistorySingleAssetTest()
        {
            IMetaModel metaModel = new MetaModel(new VersionOneAPIConnector(_metaUrl));
            IServices  services  = new Services(
                metaModel,
                new VersionOneAPIConnector(_dataUrl).WithVersionOneUsernameAndPassword(_username, _password));

            var memberType          = metaModel.GetAssetType("Member");
            var idAttribute         = memberType.GetAttributeDefinition("ID");
            var changeDateAttribute = memberType.GetAttributeDefinition("ChangeDate");
            var emailAttribute      = memberType.GetAttributeDefinition("Email");

            // the boolean parameter specifies we want the historical data
            var query = new Query(memberType, true);

            query.Selection.Add(changeDateAttribute);
            query.Selection.Add(emailAttribute);

            var idTerm = new FilterTerm(idAttribute);

            idTerm.Equal("Member:20");
            query.Filter = idTerm;

            var result = services.Retrieve(query);

            Assert.AreNotEqual(0, result.Assets.Count);
        }
コード例 #13
0
        protected string GetCustomListTypeAssetOIDFromV1(string AssetType, string AssetValue)
        {
            IAssetType           assetType     = _metaAPI.GetAssetType(AssetType);
            Query                query         = new Query(assetType);
            IAttributeDefinition nameAttribute = assetType.GetAttributeDefinition("Name");
            FilterTerm           term          = new FilterTerm(nameAttribute);

            term.Equal(AssetValue);
            query.Filter = term;

            QueryResult result;

            try
            {
                result = _dataAPI.Retrieve(query);
            }
            catch
            {
                return(null);
            }

            if (result.TotalAvaliable > 0)
            {
                return(result.Assets[0].Oid.Token.ToString());
            }
            else
            {
                return(null);
            }
        }
コード例 #14
0
        protected string CheckForDuplicateInV1(string AssetType, string AttributeName, string AttributeValue)
        {
            //if (AssetType.StartsWith("Custom_"))
            //{
            //    return null;
            //}

            IAssetType assetType = _metaAPI.GetAssetType(AssetType);
            //_logger.Info("CheckForDuplicateInV1: assetType is {0} amd value is {1} ", AssetType, AttributeValue);

            Query query = new Query(assetType);

            IAttributeDefinition valueAttribute = assetType.GetAttributeDefinition(AttributeName);

            query.Selection.Add(valueAttribute);
            FilterTerm idFilter = new FilterTerm(valueAttribute);

            idFilter.Equal(AttributeValue);
            query.Filter = idFilter;
            QueryResult result = _dataAPI.Retrieve(query);

            if (result.TotalAvaliable > 0)
            {
                return(result.Assets[0].Oid.Token.ToString());
            }
            else
            {
                return(null);
            }
        }
コード例 #15
0
        public void QueryStoryByChangeDate()
        {
            const int millisecondOffset = 5;

            var storyAsset = CreateDisposableStory(InitialStoryName, "Scope:0");

            storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0];
            var changeDate = (DateTime)storyAsset.GetAttribute(changeDateDef).Value;

            if (changeDate.Millisecond < millisecondOffset)
            {
                Assert.Ignore("Querying items by date with high precision does not make sense because seconds number will be changed by offset");
            }

            var dateTerm = new FilterTerm(changeDateDef);

            dateTerm.Greater(changeDate.AddMilliseconds(-millisecondOffset));
            var stories = GetStoryAssets(dateTerm);

            Assert.IsTrue(stories.Any(x => x.Oid.Momentless.Equals(storyAsset.Oid.Momentless)));

            dateTerm = new FilterTerm(changeDateDef);
            dateTerm.Less(changeDate.AddMilliseconds(-millisecondOffset));
            stories = GetStoryAssets(dateTerm);
            Assert.IsFalse(stories.Any(x => x.Oid.Momentless.Equals(storyAsset.Oid.Momentless)));
        }
コード例 #16
0
        public List <Asset> FilterListOfAssets()
        {
            var assetType     = _context.MetaModel.GetAssetType("Task");
            var query         = new Query(assetType);
            var nameAttribute = assetType.GetAttributeDefinition("Name");
            var todoAttribute = assetType.GetAttributeDefinition("ToDo");

            query.Selection.Add(nameAttribute);
            query.Selection.Add(todoAttribute);

            var toDoTerm = new FilterTerm(todoAttribute);

            toDoTerm.Equal(0);
            query.Filter = toDoTerm;
            var result = _context.Services.Retrieve(query);

            result.Assets.ForEach(taskAsset =>
                                  LogResult(taskAsset.Oid.Token,
                                            GetValue(taskAsset.GetAttribute(nameAttribute).Value),
                                            GetValue(taskAsset.GetAttribute(todoAttribute).Value.ToString())));

            /***** OUTPUT EXAMPLE *****
             * Task:1153
             * Code Review
             * 0
             *
             * Task:1154
             * Design Component
             * 0 ...
             ******************/

            return(result.Assets);
        }
コード例 #17
0
        public List <Asset> HistorySingleAsset()
        {
            var memberType          = _context.MetaModel.GetAssetType("Member");
            var query               = new Query(memberType, true);
            var idAttribute         = memberType.GetAttributeDefinition("ID");
            var changeDateAttribute = memberType.GetAttributeDefinition("ChangeDate");
            var emailAttribute      = memberType.GetAttributeDefinition("Email");

            query.Selection.Add(changeDateAttribute);
            query.Selection.Add(emailAttribute);
            var idTerm = new FilterTerm(idAttribute);

            idTerm.Equal("Member:20");
            query.Filter = idTerm;
            var result = _context.Services.Retrieve(query);

            result.Assets.ForEach(asset =>
                                  LogResult(asset.Oid.Token,
                                            GetValue(asset.GetAttribute(changeDateAttribute).Value),
                                            GetValue(asset.GetAttribute(emailAttribute).Value)));

            /***** OUTPUT EXAMPLE *****
             * Member:1000:105
             * 4/2/2007 1:22:03 PM
             * [email protected]
             *
             * Member:1000:101
             * 3/29/2007 4:10:29 PM
             * [email protected]
             ******************/

            return(result.Assets);
        }
コード例 #18
0
        private PropertyValues QueryPropertyValues(string propertyName)
        {
            var res       = new PropertyValues();
            var assetType = connector.MetaModel.GetAssetType(propertyName);
            var nameDef   = assetType.GetAttributeDefinition(Entity.NameProperty);
            IAttributeDefinition inactiveDef;

            var query = new Query(assetType);

            query.Selection.Add(nameDef);

            if (assetType.TryGetAttributeDefinition("Inactive", out inactiveDef))
            {
                var filter = new FilterTerm(inactiveDef);
                filter.Equal("False");
                query.Filter = filter;
            }

            query.OrderBy.MajorSort(assetType.DefaultOrderBy, OrderBy.Order.Ascending);

            res.Add(new ValueId());

            foreach (var asset in connector.Services.Retrieve(query).Assets)
            {
                var name = asset.GetAttribute(nameDef).Value as string;
                res.Add(new ValueId(asset.Oid, name));
            }

            return(res);
        }
コード例 #19
0
        public ICollection <Scope> LookupProjects(string term)
        {
            var projectType = services.Meta.GetAssetType(ScopeType);
            var parentDef   = projectType.GetAttributeDefinition("Parent");
            var nameDef     = projectType.GetAttributeDefinition(Entity.NameProperty);
            var stateDef    = projectType.GetAttributeDefinition(AssetStateAttribute);

            var filter = new FilterTerm(stateDef);

            filter.NotEqual(AssetState.Closed);

            var query = new Query(projectType, parentDef)
            {
                Filter = filter
            };

            query.Selection.Add(nameDef);
            query.OrderBy.MajorSort(projectType.DefaultOrderBy, OrderBy.Order.Ascending);

            var assets = services.Retrieve(query).Assets.Flatten();

            var selectAll = string.IsNullOrEmpty(term.Trim());

            return(assets
                   .Where(x => selectAll || x.GetAttribute(nameDef).Value.ToString().ToLowerInvariant().Contains(term.ToLowerInvariant()))
                   .Select(asset => new Scope(asset))
                   .ToList());
        }
コード例 #20
0
        /// <summary>
        /// Attempts to match owners of the workitem in the external system to users in VersionOne.
        /// </summary>
        /// <param name="ownerNames">Comma seperated list of usernames.</param>
        /// <returns>Oids of matching users in VersionOne.</returns>
        //TODO refactor
        private IEnumerable <Oid> GetOwnerOids(string ownerNames)
        {
            var result = new List <Oid>();

            if (!string.IsNullOrEmpty(ownerNames))
            {
                var memberType = services.Meta.GetAssetType("Member");
                var ownerQuery = new Query(memberType);

                var terms = new List <IFilterTerm>();

                foreach (var ownerName in ownerNames.Split(','))
                {
                    var term = new FilterTerm(memberType.GetAttributeDefinition("Username"));
                    term.Equal(ownerName);
                    terms.Add(term);
                }

                ownerQuery.Filter = new AndFilterTerm(terms.ToArray());

                var matches = services.Retrieve(ownerQuery).Assets;
                result.AddRange(matches.Select(owner => owner.Oid));
            }

            return(result.ToArray());
        }
コード例 #21
0
        public void MultiRelation <T>(string name, ICollection <T> values) where T : Entity
        {
            if (values.Count > 0)
            {
                var        def           = Resolve(name);
                FilterTerm valuesTerm    = null;
                FilterTerm notExistsTerm = null;

                foreach (var t in values)
                {
                    if (t == null)
                    {
                        if (notExistsTerm == null)
                        {
                            notExistsTerm = new FilterTerm(def);
                            notExistsTerm.NotExists();
                        }
                    }
                    else
                    {
                        if (valuesTerm == null)
                        {
                            valuesTerm = new FilterTerm(def);
                        }

                        valuesTerm.Equal(GetOid(t.ID));
                    }
                }

                Root.Or(valuesTerm, notExistsTerm);
            }
        }
コード例 #22
0
        // TODO it is known that primary workitem statuses do not have to be unique in VersionOne. In this case, the following method fails.
        private IDictionary <string, string> QueryPropertyValues(string propertyName)
        {
            var res       = new Dictionary <string, string>();
            var assetType = services.Meta.GetAssetType(propertyName);
            var valueDef  = assetType.GetAttributeDefinition("Name");
            IAttributeDefinition inactiveDef;

            var query = new Query(assetType);

            query.Selection.Add(valueDef);

            if (assetType.TryGetAttributeDefinition("Inactive", out inactiveDef))
            {
                var filter = new FilterTerm(inactiveDef);
                filter.Equal("False");
                query.Filter = filter;
            }

            query.OrderBy.MajorSort(assetType.DefaultOrderBy, OrderBy.Order.Ascending);

            foreach (var asset in services.Retrieve(query).Assets)
            {
                var name = asset.GetAttribute(valueDef).Value.ToString();
                res.Add(name, asset.Oid.ToString());
            }

            return(res);
        }
		public void Name() {
			var query = new Query(new MockAssetType());
			var term = new FilterTerm(new MockAttributeDefinition("Name"));
			term.Exists();
			query.Filter = term;
			var testMe = new QueryURLBuilder(query);
			Assert.AreEqual("Data/Mock?sel=&where=%2BMock.Name", testMe.ToString());
		}
		public void Filter() {
			var query = new Query(new MockAssetType());
			var term = new FilterTerm(new MockAttributeDefinition("Name"));
			term.Equal("Jerry's Story");
			query.Filter = term;
			var testMe = new QueryURLBuilder(query);
			const string expectedUrl = "Data/Mock?sel=&where=Mock.Name='Jerry''s+Story'";
			Assert.AreEqual(expectedUrl, Uri.UnescapeDataString(testMe.ToString()));
		}
		public void SingleNestedTerm() {
			var f1 = new FilterTerm(WorkitemToDo);
			f1.Greater(5);
			var o1 = new OrFilterTerm(f1);
			var o2 = new OrFilterTerm();
			var a1 = new AndFilterTerm(o1, o2);
			var a2 = new AndFilterTerm(a1);

			Assert.AreEqual("Workitem.ToDo>'5'", a2.Token);
		}
コード例 #26
0
 public Query(AssetType assetType, IEnumerable <AttributeDefinition> selection, FilterTerm filter, IEnumerable <OrderTerm> orderTerms, int?skip, int?take, MetaModel metaModel)
 {
     AssetType  = assetType;
     Selection  = selection;
     Filter     = filter;
     OrderTerms = orderTerms;
     Skip       = skip;
     Take       = take;
     MetaModel  = metaModel;
 }
コード例 #27
0
        private IEnumerable<string> GetCustomFields(string assetTypeName, FieldType fieldType)
        {
            var attrType = services.Meta.GetAssetType(AttributeDefinitionType);
            var assetType = services.Meta.GetAssetType(assetTypeName);
            var isCustomAttributeDef = attrType.GetAttributeDefinition("IsCustom");
            var nameAttrDef = attrType.GetAttributeDefinition(Entity.NameProperty);

            var termType = new FilterTerm(attrType.GetAttributeDefinition("Asset.AssetTypesMeAndDown.Name"));
            termType.Equal(assetTypeName);

            IAttributeDefinition inactiveDef;
            FilterTerm termState = null;

            if (assetType.TryGetAttributeDefinition("Inactive", out inactiveDef))
            {
                termState = new FilterTerm(inactiveDef);
                termState.Equal("False");
            }

            var fieldTypeName = string.Empty;
            var attributeTypeName = string.Empty;

            switch (fieldType)
            {
                case FieldType.List:
                    fieldTypeName = "OneToManyRelationDefinition";
                    attributeTypeName = "Relation";
                    break;
                case FieldType.Numeric:
                    fieldTypeName = "SimpleAttributeDefinition";
                    attributeTypeName = "Numeric";
                    break;
                case FieldType.Text:
                    fieldTypeName = "SimpleAttributeDefinition";
                    attributeTypeName = "Text";
                    break;
            }

            var assetTypeTerm = new FilterTerm(attrType.GetAttributeDefinition(AssetTypeAttribute));
            assetTypeTerm.Equal(fieldTypeName);

            var attributeTypeTerm = new FilterTerm(attrType.GetAttributeDefinition("AttributeType"));
            attributeTypeTerm.Equal(attributeTypeName);

            var isCustomTerm = new FilterTerm(isCustomAttributeDef);
            isCustomTerm.Equal("true");

            var result = GetFieldList(new AndFilterTerm(termState, termType, assetTypeTerm, isCustomTerm, attributeTypeTerm),
                new List<IAttributeDefinition> { nameAttrDef });

            var fieldList = new List<string>();
            result.ForEach(x => fieldList.Add(x.GetAttribute(nameAttrDef).Value.ToString()));

            return fieldList;
        }
		public void MultipleAttributes() {
			var query = new Query(new MockAssetType());
			query.Selection.Add(new MockAttributeDefinition("DefaultRole"));
			query.Selection.Add(new MockAttributeDefinition("Name"));
			query.Selection.Add(new MockAttributeDefinition("Nickname"));
			var term = new FilterTerm(new MockAttributeDefinition("Name"));
			term.Equal("Jerry");
			query.Filter = term;
			var testMe = new QueryURLBuilder(query);
			Assert.AreEqual("Data/Mock?sel=Mock.DefaultRole,Mock.Name,Mock.Nickname&where=Mock.Name='Jerry'", testMe.ToString());
		}
コード例 #29
0
        public void ConstructBasicFilterTerm()
        {
            var name  = Guid.NewGuid().ToString();
            var op    = FilterOperators.NotEqual;
            var value = Guid.NewGuid();
            var term  = new FilterTerm(name, op, value);

            Assert.Equal(name, term.PropertyName);
            Assert.Equal(op, term.Operator);
            Assert.Equal(value, term.Value);
        }
コード例 #30
0
        public void Name()
        {
            var query = new Query(new MockAssetType());
            var term  = new FilterTerm(new MockAttributeDefinition("Name"));

            term.Exists();
            query.Filter = term;
            var testMe = new QueryURLBuilder(query);

            Assert.AreEqual("Data/Mock?sel=&where=%2BMock.Name", testMe.ToString());
        }
コード例 #31
0
        public void Filter()
        {
            var query = new Query(new MockAssetType());
            var term  = new FilterTerm(new MockAttributeDefinition("Name"));

            term.Equal("Jerry's Story");
            query.Filter = term;
            var          testMe      = new QueryURLBuilder(query);
            const string expectedUrl = "Data/Mock?sel=&where=Mock.Name='Jerry''s+Story'";

            Assert.AreEqual(expectedUrl, Uri.UnescapeDataString(testMe.ToString()));
        }
コード例 #32
0
            /// <summary>
            /// Gets the active values of a standard list type.
            /// </summary>
            /// <typeparam name="T">The type of Entity that represents the V1 List Type.</typeparam>
            /// <returns>A list of active values for this list type.</returns>
            public IEnumerable <T> ListTypeValues <T>() where T : ListValue
            {
                var typeToGet = instance.MetaModel.GetAssetType(GetAssetTypeToken(typeof(T)));

                var query          = new Query(typeToGet);
                var assetStateTerm = new FilterTerm(typeToGet.GetAttributeDefinition("AssetState"));

                assetStateTerm.NotEqual(AssetState.Closed);
                query.Filter = new AndFilterTerm(assetStateTerm);

                return(instance.QueryToEntityEnum <T>(query));
            }
コード例 #33
0
        public void SingleNestedTerm()
        {
            var f1 = new FilterTerm(WorkitemToDo);

            f1.Greater(5);
            var o1 = new OrFilterTerm(f1);
            var o2 = new OrFilterTerm();
            var a1 = new AndFilterTerm(o1, o2);
            var a2 = new AndFilterTerm(a1);

            Assert.AreEqual("Workitem.ToDo>'5'", a2.Token);
        }
コード例 #34
0
        internal IEnumerable <CustomListValue> GetCustomListTypeValues(Entity entity, string attributeName)
        {
            var typeToGet = GetRelatedType(entity, attributeName);

            var query          = new Query(typeToGet);
            var assetStateTerm = new FilterTerm(typeToGet.GetAttributeDefinition("AssetState"));

            assetStateTerm.NotEqual(AssetState.Closed);
            query.Filter = new AndFilterTerm(assetStateTerm);

            return(Services.Retrieve(query).Assets.Select(asset => CreateWrapper <CustomListValue>(new AssetID(asset.Oid.Token), false)).ToList());
        }
		public void QueryStoryByMoment() {
			var storyAsset = CreateDisposableStory(InitialStoryName, "Scope:0");

			storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0];
			var moment = storyAsset.GetAttribute(momentDef).Value;
			Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, InitialStoryName);

			storyAsset.SetAttributeValue(nameDef, ChangedStoryName);
			services.Save(storyAsset);

			storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0];
			Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, ChangedStoryName);

			var filter = new FilterTerm(momentDef);
			filter.Equal(moment);
			storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery, filter)[0];
			Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, ChangedStoryName, "Data query should return latest workitem snapshot ignoring Moment filter");
		}
コード例 #36
0
		public void Asset_with_valid_Guid_Attribute()
		{
			var payloadGuid = Guid.Parse("98771fb4-71b8-42ec-be8b-69414daa020e");

			var subject = new Services(Meta, DataConnector);
			var publicationType = Meta.GetAssetType("Publication");
			var payloadAttribute = publicationType.GetAttributeDefinition("Payload");
			var query = new Query(publicationType);
			query.Selection.Add(payloadAttribute);
			var filter = new FilterTerm(payloadAttribute);
			filter.Equal(payloadGuid);
			query.Filter = filter;
			var result = subject.Retrieve(query);

			var payloadFromResult = (Guid)result.Assets[0].GetAttribute(payloadAttribute).Value;

			Assert.AreEqual(payloadGuid, payloadFromResult);
		}
		public void Complex2() {
			var termA = new FilterTerm(WorkitemToDo);
			termA.Greater(5);

			var termB = new FilterTerm(WorkitemToDo);
			termB.Less(10);

			var termC = new FilterTerm(WorkitemToDo);
			termC.GreaterOrEqual(20);

			var termD = new FilterTerm(WorkitemToDo);
			termD.LessOrEqual(30);

			var and1 = new AndFilterTerm(termA, termB);
			var and2 = new AndFilterTerm(termC, termD);

			var o = new OrFilterTerm(and1, and2);

			Assert.AreEqual("((Workitem.ToDo>'5';Workitem.ToDo<'10')|(Workitem.ToDo>='20';Workitem.ToDo<='30'))",
							o.Token);
		}
		public void Complex1() {
			var termA = new FilterTerm(WorkitemParent);
			termA.Equal(Oid.FromToken("Theme:5", Meta));
			termA.Equal(Oid.FromToken("Theme:6", Meta));

			var termB = new FilterTerm(WorkitemScope);
			termB.Equal(Oid.FromToken("Scope:0", Meta));

			var termC = new FilterTerm(WorkitemParent);
			termC.NotEqual(Oid.FromToken("Theme:7", Meta));
			termC.NotEqual(Oid.FromToken("Theme:8", Meta));

			var termD = new FilterTerm(WorkitemScope);
			termD.NotEqual(Oid.FromToken("Scope:1", Meta));

			var and1 = new AndFilterTerm(termA, termB);
			var and2 = new AndFilterTerm(termC, termD);

			var o = new OrFilterTerm(and1, and2);
			Assert.AreEqual(
				"((Workitem.Parent='Theme%3a5','Theme%3a6';Workitem.Scope='Scope%3a0')|(Workitem.Parent!='Theme%3a7','Theme%3a8';Workitem.Scope!='Scope%3a1'))",
				o.Token);
		}
		public void MockItemWithVariables() {
			var variable = new QueryVariable("Name", "Name1", "Name2", "Name3");
			var nameAttribute = new MockAttributeDefinition("Name");

			var query = new Query(new MockAssetType());
			query.Variables.Add(variable);
			var filter = new FilterTerm(nameAttribute);
			filter.Operate(FilterTerm.Operator.Equal, variable);
			query.Filter = filter;
			query.Selection.Add(new MockAttributeDefinition("Reference"));
			var builder = new QueryURLBuilder(query);
			Assert.AreEqual("Data/Mock?sel=Mock.Reference&where=Mock.Name=$Name&with=$Name=Name1,Name2,Name3", builder.ToString());
		}
        /// <summary>
        /// Use the Filter property of the Query object to filter the results that are returned. 
        /// This query will retrieve only Story assets with a "ToDo" of zero.
        /// </summary>
        public void FilterListOfAssetsTest()
        {
            IMetaModel metaModel = new MetaModel(new VersionOneAPIConnector(_metaUrl));
            IServices services = new Services(
                metaModel,
                new VersionOneAPIConnector(_dataUrl).WithVersionOneUsernameAndPassword(_username, _password));

            var assetType = metaModel.GetAssetType("Task");
            var query = new Query(assetType);
            var nameAttribute = assetType.GetAttributeDefinition("Name");
            var todoAttribute = assetType.GetAttributeDefinition("ToDo");

            query.Selection.Add(nameAttribute);
            query.Selection.Add(todoAttribute);

            var toDoTerm = new FilterTerm(todoAttribute);
            toDoTerm.Equal(0);
            query.Filter = toDoTerm;
            var result = services.Retrieve(query);

            result.Assets.ForEach(asset =>
                    Assert.AreEqual(0, asset.GetAttribute(todoAttribute).Value));
        }
		public void DatePrecisionInVariable() {
			var date = new DateTime(2012, 6, 21, 15, 17, 53, 504);
			var changeDateAttribute = new MockAttributeDefinition("ChangeDate");

			var query = new Query(new MockAssetType());
			var variable = new QueryVariable("requestedDate", date);
			query.Selection.Add(new MockAttributeDefinition("Name"));
			query.Variables.Add(variable);
			var filter = new FilterTerm(changeDateAttribute);
			filter.Operate(FilterTerm.Operator.Equal, variable);
			var builder = new QueryURLBuilder(query);
			query.Filter = filter;

			var queryString = builder.ToString();
			Assert.AreEqual("Data/Mock?sel=Mock.Name&where=Mock.ChangeDate=$requestedDate&with=$requestedDate=2012-06-21T15%3a17%3a53.504", queryString);
		}
		public void QueryTrackedEpicsByProject() {
			var metaConnector = new V1APIConnector(VersionOneUrl + "meta.v1/", "admin", "admin");
			var metaModel = new MetaModel(metaConnector);

			var epicType = metaModel.GetAssetType("Epic");
			var scopeType = metaModel.GetAssetType("Scope");

			var query = new Query(epicType);
			const string scopeId = "Scope:1025";

			var notClosedScopeAttribute = scopeType.GetAttributeDefinition("AssetState");
			var notClosedEpicAttribute = epicType.GetAttributeDefinition("AssetState");

			var notClosedEpicTerm = new FilterTerm(notClosedEpicAttribute);
			notClosedEpicTerm.NotEqual("Closed");

			var notClosedScopeTerm = new FilterTerm(notClosedScopeAttribute);
			notClosedScopeTerm.NotEqual("Closed");
			var scopeAttribute = epicType.GetAttributeDefinition("Scope.ParentMeAndUp");
			scopeAttribute = scopeAttribute.Filter(notClosedScopeTerm);

			var scopeTerm = new FilterTerm(scopeAttribute);
			scopeTerm.Equal(scopeId);
			var superAndUpAttribute = epicType.GetAttributeDefinition("SuperAndUp");
			superAndUpAttribute = superAndUpAttribute.Filter(scopeTerm);
			var superAndUpTerm = new FilterTerm(superAndUpAttribute);
			superAndUpTerm.NotExists();
			
			var filter = new AndFilterTerm(scopeTerm, notClosedEpicTerm, superAndUpTerm);
			query.Filter = filter;
			var builder = new QueryURLBuilder(query);
			var result = builder.ToString();
			Assert.AreEqual("Data/Epic?sel=&where=(Epic.Scope.ParentMeAndUp[AssetState!='Closed']='Scope%3a1025';Epic.AssetState!='Closed';-Epic.SuperAndUp[Scope.ParentMeAndUp[AssetState!='Closed']='Scope:1025'])", result);
		}
        public void HistorySingleAssetTest()
        {
            IMetaModel metaModel = new MetaModel(new VersionOneAPIConnector(_metaUrl));
            IServices services = new Services(
                metaModel,
                new VersionOneAPIConnector(_dataUrl).WithVersionOneUsernameAndPassword(_username, _password));

            var memberType = metaModel.GetAssetType("Member");
            var idAttribute = memberType.GetAttributeDefinition("ID");
            var changeDateAttribute = memberType.GetAttributeDefinition("ChangeDate");
            var emailAttribute = memberType.GetAttributeDefinition("Email");

            // the boolean parameter specifies we want the historical data
            var query = new Query(memberType, true);
            query.Selection.Add(changeDateAttribute);
            query.Selection.Add(emailAttribute);

            var idTerm = new FilterTerm(idAttribute);
            idTerm.Equal("Member:20");
            query.Filter = idTerm;

            var result = services.Retrieve(query);

            Assert.AreNotEqual(0, result.Assets.Count);
        }
		public void QueryStoryByChangeDate() {
			const int millisecondOffset = 5;

			var storyAsset = CreateDisposableStory(InitialStoryName, "Scope:0");

			storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0];
			var changeDate = (DateTime) storyAsset.GetAttribute(changeDateDef).Value;

			if(changeDate.Millisecond < millisecondOffset) {
				Assert.Ignore("Querying items by date with high precision does not make sense because seconds number will be changed by offset");
			}

			var dateTerm = new FilterTerm(changeDateDef);
			dateTerm.Greater(changeDate.AddMilliseconds(-millisecondOffset));
			var stories = GetStoryAssets(dateTerm);
			Assert.IsTrue(stories.Any(x => x.Oid.Momentless.Equals(storyAsset.Oid.Momentless)));

			dateTerm = new FilterTerm(changeDateDef);
			dateTerm.Less(changeDate.AddMilliseconds(-millisecondOffset));
			stories = GetStoryAssets(dateTerm);
			Assert.IsFalse(stories.Any(x => x.Oid.Momentless.Equals(storyAsset.Oid.Momentless)));
		}
		public void QueryTrackedEpicsForMultipleProjectsUsingVariables() {
			var metaConnector = new V1APIConnector(VersionOneUrl + "meta.v1/", "admin", "admin");
			var metaModel = new MetaModel(metaConnector);

			var scopeVariable = new QueryVariable("Scope", "Scope:2176");

			var epicType = metaModel.GetAssetType("Epic");

			var query = new Query(epicType);

			var notClosedEpicAttribute = epicType.GetAttributeDefinition("AssetState");

			var notClosedEpicTerm = new FilterTerm(notClosedEpicAttribute);
			notClosedEpicTerm.NotEqual("Closed");

			var scopeAttribute = epicType.GetAttributeDefinition("Scope");
			var scopeTerm = new FilterTerm(scopeAttribute);
			scopeTerm.Operate(FilterTerm.Operator.Equal, scopeVariable);

			var superAndUpAttribute = epicType.GetAttributeDefinition("SuperAndUp").Filter(scopeTerm);
			var superAndUpTerm = new FilterTerm(superAndUpAttribute);
			superAndUpTerm.NotExists();
			
			var filter = new AndFilterTerm(notClosedEpicTerm, scopeTerm, superAndUpTerm);
			query.Filter = filter;
			query.Variables.Add(scopeVariable);
			var builder = new QueryURLBuilder(query);
			var result = builder.ToString();
			Assert.AreEqual("Data/Epic?sel=&where=(Epic.AssetState!='Closed';Epic.Scope=$Scope;-Epic.SuperAndUp[Scope=$Scope])&with=$Scope=Scope%3A2176", result);
		}
		public void QueryStoryHistoryByMoment() {
			var storyAsset = CreateDisposableStory(InitialStoryName, "Scope:0");

			storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0];
			var moment = storyAsset.GetAttribute(momentDef).Value;
			Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, InitialStoryName);

			storyAsset.SetAttributeValue(nameDef, ChangedStoryName);
			services.Save(storyAsset);

			storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0];
			Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, ChangedStoryName);

			var filter = new FilterTerm(momentDef);
			filter.Equal(moment);
			storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery, filter, true)[0];
			Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, InitialStoryName, "Historical query should behave with respect to provided Moment");
		}
		public void QueryStoryChangesWithInequalityFilter() {
			var storyAsset = CreateDisposableStory(InitialStoryName, "Scope:0");

			storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0];
			var moment1 = storyAsset.GetAttribute(momentDef).Value;

			storyAsset.SetAttributeValue(nameDef, ChangedStoryName);
			services.Save(storyAsset);

			storyAsset.SetAttributeValue(nameDef, FinalStoryName);
			services.Save(storyAsset);
			storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0];
			var moment3 = storyAsset.GetAttribute(momentDef).Value;

			var filter = new FilterTerm(momentDef);
			filter.GreaterOrEqual(moment1);
			var assets = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery, filter, true);
			Assert.AreEqual(3, assets.Count);
			Assert.IsTrue(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(InitialStoryName)));
			Assert.IsTrue(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(ChangedStoryName)));
			Assert.IsTrue(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(FinalStoryName)));

			filter = new FilterTerm(momentDef);
			filter.Greater(moment1);
			assets = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery, filter, true);
			Assert.AreEqual(2, assets.Count);
			Assert.IsFalse(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(InitialStoryName)));
			Assert.IsTrue(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(ChangedStoryName)));
			Assert.IsTrue(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(FinalStoryName)));

			var lessFilter = new FilterTerm(momentDef);
			lessFilter.Less(moment3);
			var greaterFilter = new FilterTerm(momentDef);
			greaterFilter.Greater(moment1);
			var groupFilter = new AndFilterTerm(lessFilter, greaterFilter);
			assets = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery, groupFilter, true);
			Assert.AreEqual(1, assets.Count);
			Assert.IsFalse(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(InitialStoryName)));
			Assert.IsTrue(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(ChangedStoryName)));
			Assert.IsFalse(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(FinalStoryName)));
		}
		public void DatePrecision() {
			var date = new DateTime(2012, 6, 21, 15, 17, 53, 504);
			var changeDateAttribute = new MockAttributeDefinition("ChangeDate");

			var query = new Query(new MockAssetType());
			query.Selection.Add(new MockAttributeDefinition("Name"));
			var filter = new FilterTerm(changeDateAttribute);
			filter.Greater(date);
			var builder = new QueryURLBuilder(query);
			query.Filter = filter;

			var queryString = builder.ToString();
			Assert.AreEqual("Data/Mock?sel=Mock.Name&where=Mock.ChangeDate>'2012-06-21T15%3a17%3a53.504'", queryString);
		}
コード例 #49
0
        public List<Asset> FilterListOfAssets()
        {
            var assetType = _context.MetaModel.GetAssetType("Task");
            var query = new Query(assetType);
            var nameAttribute = assetType.GetAttributeDefinition("Name");
            var todoAttribute = assetType.GetAttributeDefinition("ToDo");

            query.Selection.Add(nameAttribute);
            query.Selection.Add(todoAttribute);

            var toDoTerm = new FilterTerm(todoAttribute);
            toDoTerm.Equal(0);
            query.Filter = toDoTerm;
            var result = _context.Services.Retrieve(query);

            result.Assets.ForEach(taskAsset =>
                LogResult(taskAsset.Oid.Token,
                    GetValue(taskAsset.GetAttribute(nameAttribute).Value),
                    GetValue(taskAsset.GetAttribute(todoAttribute).Value.ToString())));

            /***** OUTPUT EXAMPLE *****
             Task:1153
             Code Review
             0

             Task:1154
             Design Component
             0 ...
             ******************/

            return result.Assets;

        }
コード例 #50
0
        public List<Asset> HistorySingleAsset()
        {
            var memberType = _context.MetaModel.GetAssetType("Member");
            var query = new Query(memberType, true);
            var idAttribute = memberType.GetAttributeDefinition("ID");
            var changeDateAttribute = memberType.GetAttributeDefinition("ChangeDate");
            var emailAttribute = memberType.GetAttributeDefinition("Email");
            query.Selection.Add(changeDateAttribute);
            query.Selection.Add(emailAttribute);
            var idTerm = new FilterTerm(idAttribute);
            idTerm.Equal("Member:20");
            query.Filter = idTerm;
            var result = _context.Services.Retrieve(query);

            result.Assets.ForEach(asset =>
                LogResult(asset.Oid.Token,
                    GetValue(asset.GetAttribute(changeDateAttribute).Value),
                    GetValue(asset.GetAttribute(emailAttribute).Value)));

            /***** OUTPUT EXAMPLE *****
             Member:1000:105
             4/2/2007 1:22:03 PM
             [email protected]

             Member:1000:101
             3/29/2007 4:10:29 PM
             [email protected]
             ******************/

            return result.Assets;

        }