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; }
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; }