public DateTime? GetMostRecentChangeDateTime()
        {
            var defectType = _meta.GetAssetType("Defect");
            var query = new Query(defectType);
            var projectAttribute = defectType.GetAttributeDefinition("Scope");
            var projectTerm = new FilterTerm(projectAttribute);
            projectTerm.Equal(MonitoredProjects.Select(project => project.ScopeId).Cast<Object>().ToArray());

            var changeAttribute = defectType.GetAttributeDefinition("ChangeDateUTC");
            query.Selection.Add(changeAttribute);
            if (_mostRecentChangeDateTime.HasValue)
            {
                var changeTerm = new FilterTerm(changeAttribute);
                changeTerm.Greater(_mostRecentChangeDateTime.Value.ToString("yyyy-MM-ddTHH:mm:ss.fff", CultureInfo.InvariantCulture));
                query.Filter = new AndFilterTerm(changeTerm, projectTerm);
            } else
            {
                query.Filter = projectTerm;
            }

            var result = _services.Retrieve(query);

            if (result.TotalAvaliable > 0)
            {
                foreach (var asset in result.Assets)
                {
                    var projectChangeDateTime = DB.DateTime(asset.GetAttribute(changeAttribute).Value);
                    if ((!_mostRecentChangeDateTime.HasValue) || (projectChangeDateTime > _mostRecentChangeDateTime))
                    {
                        _mostRecentChangeDateTime = projectChangeDateTime;
                    }
                }
            }
            return _mostRecentChangeDateTime;
        }
 public bool HasChangedSince(DateTime? lastCheckedDateTime)
 {
     if (!lastCheckedDateTime.HasValue)
     {
         return true;
     }
     var defectType = _meta.GetAssetType("Defect");
     var query = new Query(defectType);
     var changeAttribute = defectType.GetAttributeDefinition("ChangeDateUTC");
     var changeTerm = new FilterTerm(changeAttribute);
     changeTerm.Greater(lastCheckedDateTime.Value.ToString("yyyy-MM-ddTHH:mm:ss.fff", CultureInfo.InvariantCulture));
     var projectAttribute = defectType.GetAttributeDefinition("Scope");
     var projectTerm = new FilterTerm(projectAttribute);
     projectTerm.Equal(MonitoredProjects.Select(project => project.ScopeId).Cast<Object>().ToArray());
     query.Filter = new AndFilterTerm(changeTerm, projectTerm);
     var result = _services.Retrieve(query);
     return result.TotalAvaliable > 0;
 }
Пример #3
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());
        }
 /// <summary>
 /// Constructs an API request on Scopes (Projects) selecting no 
 /// attributes, and filtering on changes since the last reload. If any 
 /// assets are returned in the result, then the cached paths are dirty.
 /// </summary>
 public bool IsDirty()
 {
     if (!_mostRecentChangeDateTime.HasValue)
     {
         return true;
     }
     var projectType = _meta.GetAssetType("Scope");
     var query = new Query(projectType);
     var changeAttribute = projectType.GetAttributeDefinition("ChangeDateUTC");
     var term = new FilterTerm(changeAttribute);
     term.Greater(_mostRecentChangeDateTime.Value.ToString("yyyy-MM-ddTHH:mm:ss.fff", CultureInfo.InvariantCulture));
     query.Filter = term;
     var result = _services.Retrieve(query);
     return result.TotalAvaliable > 0;
 }