public BuildResult Build(Query query, BuildResult result) {
            foreach (var builder in Builders) {
                builder.Build(query, result);
            }

            return result;
        }
        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 static string GetAssetOid(string jiraId, string assetTypeStr)
        {
            var config = (JiraConnectionConfiguration)ConfigurationManager.GetSection("jiraAttachments");

            var metaconnector = new VersionOneAPIConnector(config.V1Connection.ServerUrl + "/meta.v1/");
            var dataconnector =
                new VersionOneAPIConnector(config.V1Connection.ServerUrl + "/rest-1.v1/")
                    .WithVersionOneUsernameAndPassword(config.V1Connection.Username, config.V1Connection.Password);

            MetaModel metaModel = new MetaModel(metaconnector);
            Services services = new Services(metaModel, dataconnector);

            var assetType = metaModel.GetAssetType(assetTypeStr);
            var query = new Query(assetType);
            var jiraIdAttribute = assetType.GetAttributeDefinition(GetV1IdCustomFieldName(assetTypeStr));
            query.Selection.Add(jiraIdAttribute);
            var jiraIdTerm = new FilterTerm(jiraIdAttribute);
            jiraIdTerm.Equal(jiraId);
            query.Filter = jiraIdTerm;

            var result = services.Retrieve(query);

            if (result.Assets.Count == 0)
            {
                return String.Empty;
            }
            return result.Assets[0].Oid.ToString();
        }
 protected override void DoBuild(Query query, BuildResult result)
 {
     if (query.AsOf.CompareTo(DateTime.MinValue) > 0)
     {
         result.QuerystringParts.Add("asof=" + query.AsOf.ToString("yyyy-MM-ddTHH:mm:ss"));
     }
 }
        public void QueryForNameAndStatus()
        {
            Oid defectId = Oid.FromToken("Defect:2258150", metaModel);

            Query query = new Query(defectId);
            IAssetType defectType = metaModel.GetAssetType("Defect");
            IAttributeDefinition nameAttribute = defectType.GetAttributeDefinition("Name");
            IAttributeDefinition statusAttribute = defectType.GetAttributeDefinition(Entity.StatusProperty);
            IAttributeDefinition statusNameAttribute = defectType.GetAttributeDefinition(Entity.StatusNameProperty);
            query.Selection.Add(nameAttribute);
            query.Selection.Add(statusAttribute);
            query.Selection.Add(statusNameAttribute);

            QueryResult result = services.Retrieve(query);

            Asset defect = result.Assets[0];
            string name = defect.GetAttribute(nameAttribute).Value.ToString();
            string status = defect.GetAttribute(statusAttribute).Value.ToString();
            string statusName = defect.GetAttribute(statusNameAttribute).Value.ToString();

            defect.SetAttributeValue(statusAttribute, "StoryStatus:135");
            services.Save(defect);
            string newStatusName = defect.GetAttribute(statusAttribute).Value.ToString();

            Console.WriteLine(string.Format("{0} - {1} ", statusName, newStatusName));
        }
        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;
            }
        }
        public static void SaveItemAssociations(Project project)
        {
            if (project.BuildRuns.Count > 0)
            {
                // There is no direct association between workitems and affected/included build runs.
                // The indirect association occurs by relationship to ChangeSets.

                string defectId = project.Defects.First(x => x.Name.Equals("Fix performance SLA on load")).Id;

                IAssetType defectType = Program.MetaModel.GetAssetType("Defect");
                Query query = new Query(Oid.FromToken(defectId, Program.MetaModel));

                IAttributeDefinition foundDefectsDef = defectType.GetAttributeDefinition("FoundInBuildRuns");
                IAttributeDefinition completedDef = defectType.GetAttributeDefinition("CompletedInBuildRuns");
                IAttributeDefinition changeSetsDef = defectType.GetAttributeDefinition("ChangeSets");

                QueryResult result = Program.Services.Retrieve(query);
                Asset asset = result.Assets[0];

                // Found in first build run and completed in last build run
                // Included in build runs 2 and 3 (via ChangeSets)
                asset.AddAttributeValue(foundDefectsDef, Oid.FromToken(project.BuildRuns[0].Id, Program.MetaModel));
                asset.AddAttributeValue(completedDef, Oid.FromToken(project.BuildRuns[2].Id, Program.MetaModel));
                asset.AddAttributeValue(changeSetsDef, Oid.FromToken(project.ChangeSets[1].Id, Program.MetaModel));
                asset.AddAttributeValue(changeSetsDef, Oid.FromToken(project.ChangeSets[2].Id, Program.MetaModel));
                Program.Services.Save(asset);

                string storyId = project.Stories.First(x => x.Name.Equals("List of Books by Author")).Id;

                IAssetType storyType = Program.MetaModel.GetAssetType("Story");
                query = new Query(Oid.FromToken(storyId, Program.MetaModel));

                IAttributeDefinition completedStoryDef = storyType.GetAttributeDefinition("CompletedInBuildRuns");
                IAttributeDefinition changeSetsStoryDef = storyType.GetAttributeDefinition("ChangeSets");

                result = Program.Services.Retrieve(query);
                asset = result.Assets[0];

                // Completed in last build run
                // Included in build runs 2 and 3 (via ChangeSets)
                asset.AddAttributeValue(completedStoryDef, Oid.FromToken(project.BuildRuns[2].Id, Program.MetaModel));
                asset.AddAttributeValue(changeSetsStoryDef, Oid.FromToken(project.ChangeSets[1].Id, Program.MetaModel));
                asset.AddAttributeValue(changeSetsStoryDef, Oid.FromToken(project.ChangeSets[2].Id, Program.MetaModel));
                Program.Services.Save(asset);

                storyId = project.Stories.First(x => x.Name.Equals("View Book Details")).Id;
                query = new Query(Oid.FromToken(storyId, Program.MetaModel));

                result = Program.Services.Retrieve(query);
                asset = result.Assets[0];

                // Included in all 3 build runs (via ChangeSets)
                // Not completed yet
                asset.AddAttributeValue(changeSetsStoryDef, Oid.FromToken(project.ChangeSets[0].Id, Program.MetaModel));                
                asset.AddAttributeValue(changeSetsStoryDef, Oid.FromToken(project.ChangeSets[1].Id, Program.MetaModel));
                asset.AddAttributeValue(changeSetsStoryDef, Oid.FromToken(project.ChangeSets[2].Id, Program.MetaModel));
                Program.Services.Save( asset );
            }
        }
        private string GetLoggedInMemberRole()
        {
            var query = new Query(Services.LoggedIn);
            var defaultRoleAttribute = Services.Meta.GetAssetType(MemberType).GetAttributeDefinition(DefaultRoleNameProperty);
            query.Selection.Add(defaultRoleAttribute);

            return Services.Localization(defaultRoleAttribute);
        }
        public FluentQuery(
            string assetTypeName)
        {
            RawQuery = new Query(MetaModelProvider.Meta.GetAssetType(assetTypeName));
            AssetTypeName = assetTypeName;

            WhereCriteria = new List<Tuple<string, object, FilterTerm.Operator>>();
            SelectFields = new List<object>();
        }
        private string GetLoggedInMemberRole() {
            var query = new Query(Central.Services.LoggedIn);
            var defaultRoleAttribute = Central.MetaModel.GetAssetType(MemberType).GetAttributeDefinition(DefaultRoleNameProperty);
            query.Selection.Add(defaultRoleAttribute);

            var asset = Central.Services.Retrieve(query).Assets[0];
            var role = asset.GetAttribute(defaultRoleAttribute);
            return Central.Loc.Resolve(role.Value.ToString());
        }
        public void FilterExist() {
            var assetType = Instance.ApiClient.MetaModel.GetAssetType("Story");

            var customFilter = new FilterTerm(assetType.GetAttributeDefinition("Timebox"));
            customFilter.Exists();

            var query = new Query(assetType) {Filter = customFilter};
            Instance.ApiClient.Services.Retrieve(query);
        }
 public static Asset GetDefaultSchedule()
 {
     IAssetType assetType = Program.MetaModel.GetAssetType("Schedule");
     Query query = new Query(assetType);
     IAttributeDefinition nameAttribute = assetType.GetAttributeDefinition("Name");
     query.Selection.Add(nameAttribute);
     query.Find = new QueryFind("Default Schedule", new AttributeSelection(nameAttribute));
     QueryResult result = Program.Services.Retrieve(query);
     return result.Assets[0];
 }
        public void Run()
        {
            Log("Get some meta stuff");
            IAssetType memberType = Meta.GetAssetType("Member");
            Log(memberType.DisplayName);

            Log("Perform a query");
            var query = new Query(memberType);
            QueryResult result = Services.Retrieve(query);

            Log(string.Format("Server returned {0} members", result.TotalAvaliable));
        }
 public User CreateUserToDeactivate(string username) {
     User user = CreateTestUser(username);
     user.Deactivate = true;
     IAssetType member = model.GetAssetType("Member");
     Query query = new Query(member);
     FilterTerm term = new FilterTerm(member.GetAttributeDefinition("Username"));
     term.Equal(username);
     query.Filter = term;
     QueryResult result = services.Retrieve(query);
     user.V1MemberAsset = result.Assets[0];
     return user;
 }
        public AssetList Query(string workitemTypeName, IFilterTerm filter)
        {
            try {
                var workitemType = metaModel.GetAssetType(workitemTypeName);
                var query = new Query(workitemType) { Filter = filter};

                AddSelection(query, workitemTypeName, workitemType);
                return services.Retrieve(query).Assets;
            } catch (Exception ex) {
                throw new VersionOneException(ex.Message);
            }
        }
        protected override void DoBuild(Query query, BuildResult result)
        {

            if (query == null || query.Find == null || string.IsNullOrEmpty(query.Find.Text)) return;

            var part = string.Concat("find=", HttpUtility.UrlEncode(query.Find.Text));
            result.QuerystringParts.Add(part);

            if (query.Find.Attributes == null || query.Find.Attributes.Count == 0 || string.IsNullOrEmpty(query.Find.Attributes.Token)) return;
            part = string.Concat("findin=", HttpUtility.UrlEncode(query.Find.Attributes.Token));
            result.QuerystringParts.Add(part);

        }
        public override int Export()
        {
            IAssetType assetType = _metaAPI.GetAssetType("AttributeDefinition");
            Query query = new Query(assetType);

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

            IAttributeDefinition isBasicAttribute = assetType.GetAttributeDefinition("IsBasic");
            query.Selection.Add(isBasicAttribute);

            IAttributeDefinition nativeValueAttribute = assetType.GetAttributeDefinition("NativeValue");
            query.Selection.Add(nativeValueAttribute);

            IAttributeDefinition isCustomAttribute = assetType.GetAttributeDefinition("IsCustom");
            query.Selection.Add(isCustomAttribute);

            IAttributeDefinition isReadOnlyAttribute = assetType.GetAttributeDefinition("IsReadOnly");
            query.Selection.Add(isReadOnlyAttribute);

            IAttributeDefinition isRequiredAttribute = assetType.GetAttributeDefinition("IsRequired");
            query.Selection.Add(isRequiredAttribute);

            IAttributeDefinition attributeTypeAttribute = assetType.GetAttributeDefinition("AttributeType");
            query.Selection.Add(attributeTypeAttribute);

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

            //Filter on asset type and if attribute definition is custom.
            FilterTerm assetName = new FilterTerm(assetNameAttribute);
            assetName.Equal(_InternalAssetType);
            FilterTerm isCustom = new FilterTerm(isCustomAttribute);
            isCustom.Equal("true");
            query.Filter = new AndFilterTerm(assetName, isCustom);

            QueryResult result = _dataAPI.Retrieve(query);

            int customFieldCount = 0;
            foreach (Asset asset in result.Assets)
            {
                string attributeName = GetScalerValue(asset.GetAttribute(nameAttribute)).ToString();
                string attributeType = GetScalerValue(asset.GetAttribute(attributeTypeAttribute)).ToString();
                if (attributeName.StartsWith("Custom_"))
                {
                    _logger.Info("The CustomField is {0} and Type is {1}", attributeName, attributeType);
                    customFieldCount += GetCustomFields(attributeName, attributeType);
                }
            }
            return customFieldCount;
        }
        public static void BlockDefectWithIssue(Project project)
        {
            if (project.Issues.Count > 0)
            {
                Query query = new Query(Oid.FromToken(project.Issues[0].Id, Program.MetaModel));
                IAttributeDefinition workitemsDef = Program.MetaModel.GetAttributeDefinition("Issue.BlockedPrimaryWorkitems");
                QueryResult result = Program.Services.Retrieve(query);
                Asset issue = result.Assets[0];

                string defectId = project.Defects.First(x => x.Name.Equals("Fix performance SLA on load")).Id;
                issue.AddAttributeValue(workitemsDef, Oid.FromToken(defectId, Program.MetaModel));
                Program.Services.Save(issue);
            }
        }
        public static string GetV1IdCustomFieldName(string internalAssetTypeName)
        {
            var config = (JiraConnectionConfiguration)ConfigurationManager.GetSection("jiraAttachments");

            if (!String.IsNullOrEmpty(config.V1Connection.CustomField))
            {
                string customFieldName = String.Empty;

                var metaconnector = new VersionOneAPIConnector(config.V1Connection.ServerUrl + "/meta.v1/");
                var dataconnector =
                    new VersionOneAPIConnector(config.V1Connection.ServerUrl + "/rest-1.v1/")
                        .WithVersionOneUsernameAndPassword(config.V1Connection.Username, config.V1Connection.Password);

                MetaModel metaApi = new MetaModel(metaconnector);
                Services dataApi = new Services(metaApi,dataconnector);

                IAssetType assetType = metaApi.GetAssetType("AttributeDefinition");
                Query query = new Query(assetType);

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

                IAttributeDefinition isCustomAttribute = assetType.GetAttributeDefinition("IsCustom");
                query.Selection.Add(isCustomAttribute);

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

                FilterTerm assetName = new FilterTerm(assetNameAttribute);
                assetName.Equal(internalAssetTypeName);
                FilterTerm isCustom = new FilterTerm(isCustomAttribute);
                isCustom.Equal("true");
                query.Filter = new AndFilterTerm(assetName, isCustom);

                QueryResult result = dataApi.Retrieve(query);

                foreach (Asset asset in result.Assets)
                {
                    string attributeValue = asset.GetAttribute(nameAttribute).Value.ToString();
                    if (attributeValue.StartsWith(config.V1Connection.CustomField))
                    {
                        customFieldName = attributeValue;
                        break;
                    }
                }
                return customFieldName;
            }
            return null;
        }
        // 8/7/2012 AJB Commented out to replace with new version of method based on API changes for Epics.
        //public static void SaveEpics(Project project, IList<Member> owners)
        //{
        //    IAssetType storyType = Program.MetaModel.GetAssetType("Story");
        //    IAttributeDefinition nameDef = storyType.GetAttributeDefinition("Name");
        //    IAttributeDefinition ownersDef = storyType.GetAttributeDefinition("Owners");
        //    Utils.Logger.Info("ABOUT TO SAVE EPICS FOR: " + project.Name);

        //    foreach (Epic epic in project.Epics)
        //    {
        //        Asset asset = Program.Services.New(storyType, Oid.FromToken(project.Id, Program.MetaModel));
        //        asset.SetAttributeValue(nameDef, epic.Name);
        //        asset.AddAttributeValue(ownersDef, Oid.FromToken(owners[0].Id, Program.MetaModel));

        //        Program.Services.Save(asset);
        //        epic.Id = asset.Oid.Momentless.Token;

        //        IOperation storyToEpic = storyType.GetOperation("StoryToEpic");
        //        Program.Services.ExecuteOperation(storyToEpic, asset.Oid);
        //    }
        //}

        public static void AddStoriesToEpic(Project project)
        {
            var stories = project.Stories.Where(x => x.Name.StartsWith("Search by"));

            foreach (Story item in stories)
            {
                Query query = new Query(Oid.FromToken(item.Id, Program.MetaModel));
                IAssetType storyType = Program.MetaModel.GetAssetType("Story");
                IAttributeDefinition superDef = storyType.GetAttributeDefinition("Super");
                QueryResult result = Program.Services.Retrieve(query);
                Asset story = result.Assets[0];
                story.SetAttributeValue(superDef, project.Epics[0].Id);
                Program.Services.Save(story);
            }
        }
 public static void UpdateTest(string testId, string status, int todo)
 {
     Query query = new Query(Oid.FromToken(testId, Program.MetaModel));
     IAssetType testType = Program.MetaModel.GetAssetType("Test");
     IAttributeDefinition statusAttribute = testType.GetAttributeDefinition("Status");
     IAttributeDefinition toDoAttribute = testType.GetAttributeDefinition("ToDo");
     QueryResult result = Program.Services.Retrieve(query);
     Asset test = result.Assets[0];
     test.SetAttributeValue(statusAttribute, Oid.FromToken(status, Program.MetaModel));
  
     if (todo > -1)
         test.SetAttributeValue(toDoAttribute, todo);
     
     Program.Services.Save(test);
 }
        internal static string GetAssetIDFromCode(string AssetType, string Code, IMetaModel MetaAPI, IServices DataAPI)
        {
            IAssetType assetType = MetaAPI.GetAssetType(AssetType);
            Query query = new Query(assetType);
            IAttributeDefinition codeAttribute = assetType.GetAttributeDefinition("Code");
            FilterTerm term = new FilterTerm(codeAttribute);
            term.Equal(Code);
            query.Filter = term;
            QueryResult result = DataAPI.Retrieve(query);

            if (result.TotalAvaliable > 0)
                return result.Assets[0].Oid.Token;
            else
                return String.Empty;
        }
        private void AddSelection(Query query, string typePrefix, IAssetType type) {
            foreach (var attrInfo in attributesToQuery.Where(attrInfo => attrInfo.Prefix == typePrefix)) {
                IAttributeDefinition def;
                
                if (attrInfo.IsOptional) {
                    if (!type.TryGetAttributeDefinition(attrInfo.Attr, out def)) {
                        continue;
                    }
                } else {
                    def = type.GetAttributeDefinition(attrInfo.Attr);
                }

                query.Selection.Add(def);
            }
        }
        public AssetList Query(string workitemTypeName, IFilterTerm filter) {
            try {
                var workitemType = metaModel.GetAssetType(workitemTypeName);
                var query = new Query(workitemType) { Filter = filter};

                if(sortBy != null) {
                    var order = sortBy.Order == Order.Ascending ? OrderBy.Order.Ascending : OrderBy.Order.Descending;
                    query.OrderBy.MajorSort(workitemType.GetAttributeDefinition(sortBy.Attribute), order);
                }

                AddSelection(query, workitemTypeName, workitemType);
                return services.Retrieve(query).Assets;
            } catch (Exception ex) {
                throw new VersionOneException(ex.Message);
            }
        }
        /**************************************************************************************
        * Protected methods used by derived classes.
        **************************************************************************************/
        protected Asset GetAssetFromV1(string AssetID)
        {
            Oid assetId = Oid.FromToken(AssetID, _metaAPI);
            Query query = new Query(assetId);

            IAssetType assetType = _metaAPI.GetAssetType("Epic");
            IAttributeDefinition assetStateAttribute = assetType.GetAttributeDefinition("AssetState");
            query.Selection.Add(assetStateAttribute);

            QueryResult result = _dataAPI.Retrieve(query);

            if (result.Assets.Count > 0)
                return result.Assets[0];
            else
                return null;
        }
		private void UpdateStory(AssetID id, string originalName, string newName)
		{
			IMetaModel metaModel = Instance.ApiClient.MetaModel;
			IServices services = Instance.ApiClient.Services;

			Oid storyId = Oid.FromToken(id.Token, metaModel);
			Query query = new Query(storyId);
			IAssetType storyType = metaModel.GetAssetType("Story");
			IAttributeDefinition nameAttribute = storyType.GetAttributeDefinition("Name");
			query.Selection.Add(nameAttribute);
			QueryResult result = services.Retrieve(query);
			Asset storyAsset = result.Assets[0];
			string oldName = storyAsset.GetAttribute(nameAttribute).Value.ToString();
			Assert.AreEqual(originalName, oldName);
			storyAsset.SetAttributeValue(nameAttribute, newName);
			services.Save(storyAsset);
		}
        public QueryResult Retrieve(Query query) {
            var doc = new XmlDocument();
            
            try {
                using(var stream = connector.GetData(new QueryURLBuilder(query).ToString())) {
                    doc.Load(stream);
                }
            } catch (WebException ex) {
                //if we get a 404, return an empty query result otherwise throw the exception
                if(ex.Response is HttpWebResponse && ((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound) {
                    return GetEmptyQueryResult(query);
                }

                throw;
            }

            return ParseQueryResult(doc.DocumentElement, query);
        }
 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 override int Export()
        {
            int listTypeCount = 0;
            string SQL = BuildListTypeInsertStatement();

            foreach (V1DataCore.MigrationConfiguration.ListTypeInfo listType in _config.ListTypesToMigrate)
            {
                if (listType.Enabled == true)
                {
                    IAssetType assetType = _metaAPI.GetAssetType(listType.Name);
                    Query query = new Query(assetType);

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

                    IAttributeDefinition assetStateAttribute = assetType.GetAttributeDefinition("AssetState");
                    query.Selection.Add(assetStateAttribute);

                    IAttributeDefinition descriptionAttribute = assetType.GetAttributeDefinition("Description");
                    query.Selection.Add(descriptionAttribute);

                    QueryResult result = _dataAPI.Retrieve(query);

                    foreach (Asset asset in result.Assets)
                    {
                        using (SqlCommand cmd = new SqlCommand())
                        {
                            cmd.Connection = _sqlConn;
                            cmd.CommandText = SQL;
                            cmd.CommandType = System.Data.CommandType.Text;
                            cmd.Parameters.AddWithValue("@AssetOID", asset.Oid.ToString());
                            cmd.Parameters.AddWithValue("@AssetType", listType.Name);
                            cmd.Parameters.AddWithValue("@AssetState", GetScalerValue(asset.GetAttribute(assetStateAttribute)));
                            cmd.Parameters.AddWithValue("@Description", GetScalerValue(asset.GetAttribute(descriptionAttribute)));
                            cmd.Parameters.AddWithValue("@Name", GetScalerValue(asset.GetAttribute(nameAttribute)));
                            cmd.ExecuteNonQuery();
                        }
                        listTypeCount++;
                    }
                }
            }
            return listTypeCount;
        }
        public IDictionary<string, User> GetVersionOneUsers() {
            IAssetType memberType = _model.GetAssetType(V1Constants.MEMBER);
            Query userQuery = new Query(memberType);

            IAttributeDefinition username = _model.GetAttributeDefinition(V1Constants.USERNAME);
            IAttributeDefinition isInactive = _model.GetAttributeDefinition(V1Constants.ISINACTIVE);
            IAttributeDefinition ckInactivate = _model.GetAttributeDefinition(V1Constants.CHECKINACTIVATE);

            userQuery.Selection.Add(username);
            userQuery.Selection.Add(isInactive);
            userQuery.Selection.Add(ckInactivate);
            QueryResult result = _services.Retrieve(userQuery);

            IDictionary<string, User> v1UserList = BuildV1UsersList(result.Assets);

            logger.Info(v1UserList.Count + " users successfully retrieved from VersionOne.");
            //[count] users successfully retrieved from V1...

            return v1UserList;
        }