Beispiel #1
0
        /// <summary>
        /// Method to download the issues for the given project
        /// </summary>
        /// <param name="source">the external data source to use</param>
        /// <param name="project">the project to download the issues for</param>
        /// <returns>the list of issues corresponding to the given project</returns>
        private static IList <IssueInfo> DownloadIssuesForProject(IExternalSource source, ProjectInfo project)
        {
            // get parameter and action
            var parameters = new DataSourceParameter()
            {
                ProjectId = project.Id, StatusId = -1
            };
            Action <int, int> action =
                (i, overall) =>
            {
                if (Globals.ThisAddIn == null)
                {
                    return;
                }
                Globals.ThisAddIn.SyncState.Status = string.Format(
                    "Lade Issues für neues Projekt {0} ({1}/{2})",
                    project.Name,
                    Math.Min(i, overall),
                    overall);
            };

            try
            {
                // load data and add the issues. Note that we load all issues here
                var newIssuesOfProject = source.GetTotalIssueInfoList(parameters, action);
                return(newIssuesOfProject);
            }
            catch (Exception exception)
            {
                Log.Error(string.Format("Error while loading project {0}", project.Name), exception);
                return(new List <IssueInfo>());
            }
        }
        private List <DataSourceParameter> ProcessParametersText(string parameters)
        {
            List <DataSourceParameter> dsParams = new List <DataSourceParameter>();

            if (string.IsNullOrWhiteSpace(parameters))
            {
                return(dsParams);
            }

            foreach (var line in parameters.Split("\n", StringSplitOptions.RemoveEmptyEntries))
            {
                var parts = line.Replace("\r", "").Split(",", StringSplitOptions.RemoveEmptyEntries);
                if (parts.Count() != 3)
                {
                    throw new Exception("Invalid parameter description: " + line);
                }

                DataSourceParameter dsPar = new DataSourceParameter();
                dsPar.Name = parts[0].Trim();
                dsPar.Type = parts[1].ToLowerInvariant().Trim();
                if (string.IsNullOrWhiteSpace(dsPar.Type))
                {
                    throw new Exception("Invalid parameter type in: " + line);
                }

                dsPar.Value = parts[2].Trim();
                dsParams.Add(dsPar);
            }
            return(dsParams);
        }
Beispiel #3
0
        /// <summary>
        /// Downloads all redmine projects and update the cache with the new data
        /// </summary>
        /// <param name="source">the data source to use</param>
        /// <returns>The projects that are downloaded from redmine.</returns>
        public static ProjectLists GetCurrentProjectsAndUpdateCache(IExternalSource source)
        {
            if (Globals.ThisAddIn != null)
            {
                Globals.ThisAddIn.SyncState.Status = "Lade Projekte...";
            }

            var parameters = new DataSourceParameter();
            var projects   = source.GetTotalProjectList(
                parameters,
                (cur, total) =>
            {
                if (Globals.ThisAddIn != null)
                {
                    Globals.ThisAddIn.SyncState.Status = string.Format("Lade Projekte ({0}/{1})", Math.Min(cur, total), total);
                }
            }).Where(p => p.Id.HasValue).ToDictionary(p => p.Id.Value, p => p);

            // Get the known projects from localcache
            var knownProjects = LocalCache.ReadObject(LocalCache.KnownProjects, new List <ProjectInfo>()) as List <ProjectInfo> ?? new List <ProjectInfo>();

            // Find those projects which are new
            var newProjects = projects.Values.Except(knownProjects).ToList();

            // Write all currently known projects
            LocalCache.WriteObject(LocalCache.KnownProjects, projects.Values.ToList());

            return(new ProjectLists()
            {
                AllProjects = projects, NewProjects = newProjects
            });
        }
Beispiel #4
0
        /// <summary>
        /// Method to get the list of all activity infos
        /// </summary>
        /// <param name="source">the external data source</param>
        /// <returns>the activities</returns>
        public static Dictionary <int, ActivityInfo> GetActivityInfos(IExternalSource source)
        {
            var parameters = new DataSourceParameter()
            {
                UseLimit = false
            };
            var activities = source.GetTotalActivityInfoList(parameters).ToDictionary(act => act.Id.Value, act => act);

            return(activities);
        }
        public EqlParameter ConvertDataSourceParameterToEqlParameter(DataSourceParameter dsParameter)
        {
            var parName = dsParameter.Name;

            if (!parName.StartsWith("@"))
            {
                parName = "@" + parName;
            }

            return(new EqlParameter(parName, GetDataSourceParameterValue(dsParameter)));
        }
Beispiel #6
0
        public void TestParameterConversionNoParameterGiven()
        {
            // arrange
            var manager   = new RedmineManagerInstance(Url, ApiKey);
            var parameter = new DataSourceParameter();

            // act
            var queryParameter = manager.GetParametersForQuery(parameter);

            // assert
            Assert.That(queryParameter, Is.Not.Null);
            Assert.That(queryParameter.Count, Is.EqualTo(0));
        }
Beispiel #7
0
        public void TestDownloadProjectInfos()
        {
            // arrange
            var manager    = new RedmineManagerInstance(Url, ApiKey);
            var parameters = new DataSourceParameter();

            // act
            var projects = manager.GetTotalProjectList(parameters);

            // assert
            Assert.That(projects, Is.Not.Null);
            Assert.That(projects.Count, Is.GreaterThan(0));
        }
Beispiel #8
0
        public void TestGetAllIssuesAssignedToMe()
        {
            var manager    = new RedmineManagerInstance(Url, ApiKey);
            var parameters = new DataSourceParameter()
            {
                AssignedToUserId = -1
            };

            // act
            var issues = manager.GetIssueInfoList(parameters);

            // assert
            Assert.That(issues.Count, Is.GreaterThan(0));
        }
Beispiel #9
0
        public void TestDownloadIssueInfosWithProjectFilterForExistingProject()
        {
            // arrange
            var manager    = new RedmineManagerInstance(Url, ApiKey);
            var parameters = new DataSourceParameter()
            {
                ProjectId = 333
            };

            // act
            var issues = manager.GetTotalIssueInfoList(parameters);

            // assert
            Assert.That(issues, Is.Not.Null);
            Assert.That(issues.Count, Is.GreaterThan(0));
        }
Beispiel #10
0
        /// <summary>
        /// Method to get the parameter to use for the download of the issues
        /// </summary>
        /// <param name="issuesKnown">flag indicating if up to now issues are known already</param>
        /// <returns>the parameter to use for the query</returns>
        private static DataSourceParameter GetDataSourceParameterForDownloadOfIssues(bool issuesKnown)
        {
            // get new issues since that date minus one
            var lastSync   = Settings.Default.LastIssueSyncDate;
            var parameters = new DataSourceParameter()
            {
                UseLimit = true, StatusId = -1
            };

            if (issuesKnown)
            {
                Log.Info(string.Format("Last Sync Date set to {0:d}", lastSync.Date.AddDays(-2)));
                parameters.UpdateStartDateTime = lastSync.Date.AddDays(-2);
            }
            return(parameters);
        }
Beispiel #11
0
        public void TestParameterConversionNoParameterButProjectIdSet(int projectIdToSet, string expectedValue)
        {
            // arrange
            var manager   = new RedmineManagerInstance(Url, ApiKey);
            var parameter = new DataSourceParameter()
            {
                ProjectId = projectIdToSet
            };

            // act
            var queryParameter = manager.GetParametersForQuery(parameter);

            // assert
            Assert.That(queryParameter, Is.Not.Null);
            Assert.That(queryParameter.Count, Is.EqualTo(1));
            Assert.That(queryParameter["project_id"], Is.EqualTo(expectedValue));
        }
Beispiel #12
0
        public void TestParameterConversionNoParameterButSpentTimeSet()
        {
            // arrange
            var manager   = new RedmineManagerInstance(Url, ApiKey);
            var parameter = new DataSourceParameter()
            {
                SpentDateTimeTuple = Tuple.Create(new DateTime(2016, 1, 3), new DateTime(2017, 7, 26))
            };

            // act
            var queryParameter = manager.GetParametersForQuery(parameter);

            // assert
            Assert.That(queryParameter, Is.Not.Null);
            Assert.That(queryParameter.Count, Is.EqualTo(1));
            Assert.That(queryParameter["spent_on"], Is.EqualTo("><2016-01-03|2017-07-26"));
        }
Beispiel #13
0
        public void TestParameterConversionNoParameterButUpdateStartTimeSet()
        {
            // arrange
            var manager   = new RedmineManagerInstance(Url, ApiKey);
            var parameter = new DataSourceParameter()
            {
                UpdateStartDateTime = new DateTime(2017, 2, 8)
            };

            // act
            var queryParameter = manager.GetParametersForQuery(parameter);

            // assert
            Assert.That(queryParameter, Is.Not.Null);
            Assert.That(queryParameter.Count, Is.EqualTo(1));
            Assert.That(queryParameter["updated_on"], Is.EqualTo(">=2017-02-08"));
        }
Beispiel #14
0
        public void TestDownloadIssueInfosWithLimitViaBoolLimit()
        {
            // arrange
            var manager    = new RedmineManagerInstance(Url, ApiKey, 1);
            var parameters = new DataSourceParameter()
            {
                UseLimit = true
            };

            // act
            var issues = manager.GetIssueInfoList(parameters);

            // assert
            Assert.That(issues, Is.Not.Null);
            Assert.That(issues.Count, Is.GreaterThan(0));
            Assert.That(issues.Count, Is.LessThanOrEqualTo(1));
        }
        protected DataSourceParameters GetArgs(string query)
        {
            using (var connection = GetOpenedConnection())
            {
                var queryParameters = new DataSourceParameters();
                using var reader = connection.GetReader(query);

                while (reader.Read())
                {
                    var args = new DataSourceParameter
                    {
                        Name = reader.GetValue(0)?.ToString(),
                        Type = reader.GetValue(1)?.ToString()
                    };

                    queryParameters.Parameters.Add(args);
                }

                return(queryParameters);
            }
        }
Beispiel #16
0
        private dynamic ParsePostData()
        {
            var                 formData   = HttpContext.Request.Form;
            dynamic             rec        = new ExpandoObject();
            ValidationException validation = new ValidationException();
            DataSourceManager   dsMan      = new DataSourceManager();
            DataSourceBase      dataSource = null;

            rec.IsDeleteAction = false;

            //handle delete
            if (formData.ContainsKey("action") && formData["action"] == "delete")
            {
                rec.IsDeleteAction = true;

                rec.PageDataSourceId = (Guid?)null;
                if (formData.ContainsKey("page_datasource_id") && !string.IsNullOrWhiteSpace(formData["page_datasource_id"]))
                {
                    Guid pageDataSourceId;
                    if (Guid.TryParse(formData["page_datasource_id"], out pageDataSourceId))
                    {
                        rec.PageDataSourceId = pageDataSourceId;
                    }
                    else
                    {
                        validation.AddError("page_datasource_id", "Specified page data source id is not in valid GUID format.");
                    }
                }
                validation.CheckAndThrow();

                return(rec);
            }

            //continue with create or update parse
            rec.PageDataSourceId = (Guid?)null;
            if (formData.ContainsKey("page_datasource_id") && !string.IsNullOrWhiteSpace(formData["page_datasource_id"]))
            {
                Guid pageDataSourceId;
                if (Guid.TryParse(formData["page_datasource_id"], out pageDataSourceId))
                {
                    rec.PageDataSourceId = pageDataSourceId;
                }
                else
                {
                    validation.AddError("page_datasource_id", "Specified page data source id is not in valid GUID format.");
                }
            }

            if (formData.ContainsKey("page_id") && !string.IsNullOrWhiteSpace(formData["page_id"]))
            {
                Guid pageId;
                if (Guid.TryParse(formData["page_id"], out pageId))
                {
                    rec.PageId = pageId;
                }
                else
                {
                    validation.AddError("page_id", "Specified page id is not in valid GUID format.");
                }
            }
            else
            {
                validation.AddError("page_id", "Page id is not specified.");
            }

            if (formData.ContainsKey("datasource_id") && !string.IsNullOrWhiteSpace(formData["datasource_id"]))
            {
                Guid datasourceId;
                if (Guid.TryParse(formData["datasource_id"], out datasourceId))
                {
                    rec.DataSourceId = datasourceId;
                    dataSource       = dsMan.Get(datasourceId);
                    if (dataSource == null)
                    {
                        validation.AddError("datasource_id", "Specified datasource id is not found in database.");
                    }
                }
                else
                {
                    validation.AddError("datasource_id", "Specified datasource id is not in valid GUID format.");
                }
            }
            else
            {
                validation.AddError("datasource_id", "Datasource id is not specified.");
            }

            if (formData.ContainsKey("page_datasource_name") && !string.IsNullOrWhiteSpace(formData["page_datasource_name"]))
            {
                rec.Name = formData["page_datasource_name"];
            }
            else
            {
                validation.AddError("page_datasource_name", "Page datasource name is not specified.");
            }

            validation.CheckAndThrow();

            List <DataSourceParameter> parameters = new List <DataSourceParameter>();

            foreach (var par in dataSource.Parameters)
            {
                var htmlKey = "@_" + par.Name;
                if (formData.Keys.Contains(htmlKey) && !string.IsNullOrWhiteSpace(formData[htmlKey]))
                {
                    DataSourceParameter parameter = new DataSourceParameter();
                    parameter.Name  = par.Name;
                    parameter.Type  = par.Type;
                    parameter.Value = formData[htmlKey];
                    parameters.Add(parameter);
                }
            }
            rec.Parameters = parameters;

            return(rec);
        }
        public object GetDataSourceParameterValue(DataSourceParameter dsParameter)
        {
            switch (dsParameter.Type.ToLower())
            {
            case "guid":
            {
                if (string.IsNullOrWhiteSpace(dsParameter.Value))
                {
                    return(null);
                }

                if (dsParameter.Value.ToLowerInvariant() == "null")
                {
                    return(null);
                }

                if (dsParameter.Value.ToLowerInvariant() == "guid.empty")
                {
                    return(Guid.Empty);
                }

                if (Guid.TryParse(dsParameter.Value, out Guid value))
                {
                    return(value);
                }

                throw new Exception($"Invalid Guid value for parameter: " + dsParameter.Name);
            }

            case "int":
            {
                if (string.IsNullOrWhiteSpace(dsParameter.Value))
                {
                    return(null);
                }

                if (Int32.TryParse(dsParameter.Value, out int value))
                {
                    return(value);
                }

                if (dsParameter.Value.ToLowerInvariant() == "null")
                {
                    return(null);
                }

                throw new Exception($"Invalid int value for parameter: " + dsParameter.Name);
            }

            case "decimal":
            {
                if (string.IsNullOrWhiteSpace(dsParameter.Value))
                {
                    return(null);
                }

                if (Decimal.TryParse(dsParameter.Value, out decimal value))
                {
                    return(value);
                }

                throw new Exception($"Invalid decimal value for parameter: " + dsParameter.Name);
            }

            case "date":
            {
                if (string.IsNullOrWhiteSpace(dsParameter.Value))
                {
                    return(null);
                }

                if (dsParameter.Value.ToLowerInvariant() == "null")
                {
                    return(null);
                }

                if (dsParameter.Value.ToLowerInvariant() == "now")
                {
                    return(DateTime.Now);
                }

                if (dsParameter.Value.ToLowerInvariant() == "utc_now")
                {
                    return(DateTime.UtcNow);
                }

                if (DateTime.TryParse(dsParameter.Value, out DateTime value))
                {
                    return(value);
                }

                throw new Exception($"Invalid datetime value for parameter: " + dsParameter.Name);
            }

            case "text":
            {
                if (dsParameter.Value.ToLowerInvariant() == "null")
                {
                    return(null);
                }

                if (dsParameter.Value.ToLowerInvariant() == "string.empty")
                {
                    return(String.Empty);
                }

                return(dsParameter.Value);
            }

            case "bool":
            {
                if (dsParameter.Value.ToLowerInvariant() == "null")
                {
                    return(null);
                }

                if (dsParameter.Value.ToLowerInvariant() == "true")
                {
                    return(true);
                }

                if (dsParameter.Value.ToLowerInvariant() == "false")
                {
                    return(false);
                }

                throw new Exception($"Invalid boolean value for parameter: " + dsParameter.Name);
            }

            default:
                throw new Exception($"Invalid parameter type '{dsParameter.Type}' for '{dsParameter.Name}'");
            }
        }