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()); }
private void CreateMultipleScopeFilter(FilterBuilder builder) { builder.Relation("Scope", projects); var metaModel = builder.Instance.ApiClient.MetaModel; var epicType = metaModel.GetAssetType("Epic"); var scopeAttribute = epicType.GetAttributeDefinition("Scope"); var scopeTerm = new FilterTerm(scopeAttribute); scopeTerm.Operate(FilterTerm.Operator.Equal, projects.Select(x => x.ToString()).Cast <object>().ToArray()); var superAndUpAttribute = epicType.GetAttributeDefinition("SuperAndUp").Filter(scopeTerm); var superAndUpTerm = builder.Root.Term(superAndUpAttribute); superAndUpTerm.NotExists(); }
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 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 Execute( public FreeQuery( string assetTypeName, object[] select = null, IEnumerable <Tuple <string, object, FilterTerm.Operator> > where = null, Action <IEnumerable <AssetClassBase> > success = null, Action <Exception> error = null ) { if (success == null) { throw new ArgumentNullException("success"); } if (error == null) { throw new ArgumentNullException("error"); } try { var query = new Query(MetaModelProvider.Meta.GetAssetType(assetTypeName)); var attributes = new List <IAttributeDefinition>(); if (select != null) { attributes.AddRange( select.Select( m => MetaModelProvider.Meta.GetAttributeDefinition(assetTypeName + "." + m.ToString()))); } query.Selection.AddRange(attributes); if (where != null) { var andTerms = new List <FilterTerm>(); foreach (var tuple in where) { var attribute = MetaModelProvider.Meta.GetAttributeDefinition(assetTypeName + "." + tuple.Item1); var item = tuple.Item2; var term = new FilterTerm(attribute); term.Operate(tuple.Item3, item); andTerms.Add(term); } var andTerm = new AndFilterTerm(andTerms.ToArray()); query.Filter = andTerm; } var list = new List <AssetClassBase>(); var result = ServicesProvider.Services.Retrieve(query); if (result.Assets.Count == 0) { success(list); } list.AddRange(result.Assets.Select(a => new AssetClassBase(a, assetTypeName))); success(list); } catch (Exception exception) { error(exception); } //var task = new TaskFactory<List<AssetClassBase>>().StartNew(() => // { // var result = ServicesProvider.Services.Retrieve(query); // if (result.Assets.Count == 0) // { // return list; // } // list.AddRange( // result.Assets.Select( // a => new AssetClass(a, assetTypeName))); // return list; // }); }
public FluentQuery Execute(Action <IEnumerable <AssetClassBase> > successCallback = null) { if (OnSuccess == null && successCallback == null) { throw new NullReferenceException("Must specify the OnSuccess callback before calling Execute or pass it directly to Execute as a parameter"); } try { var attributes = new List <IAttributeDefinition>(); if (SelectFields.Count > 0) { attributes.AddRange( SelectFields.Select( m => MetaModelProvider.Meta.GetAttributeDefinition(AssetTypeName + "." + m.ToString()))); } RawQuery.Selection.AddRange(attributes); if (WhereCriteria.Count > 0) { var andTerms = new List <FilterTerm>(); foreach (var tuple in WhereCriteria) { var attribute = MetaModelProvider.Meta.GetAttributeDefinition(AssetTypeName + "." + tuple.Item1); var item = tuple.Item2; var term = new FilterTerm(attribute); term.Operate(tuple.Item3, item); andTerms.Add(term); } var andTerm = new AndFilterTerm(andTerms.ToArray()); RawQuery.Filter = andTerm; } var list = new List <AssetClassBase>(); var result = ServicesProvider.Services.Retrieve(RawQuery); if (result.Assets.Count == 0) { OnSuccess(list); } list.AddRange(result.Assets.Select(a => new AssetClassBase(a, AssetTypeName))); if (list.Count == 0 && OnEmptyResults != null) { OnEmptyResults(); } if (successCallback != null) { successCallback(list); } else { OnSuccess(list); } } catch (Exception exception) { if (OnError != null) { OnError(exception); } else { throw; } } return(this); }