public async Task <Topic> ToNewSpecialObject(IStandardInstance instance)
        {
            string projectId = await ProjectIdProvider.GetProjectId(instance.Identifiers, await _dbService.GetAllProjectMappings());

            var author = instance.Author == null ? null : await _dbService.GetEasyAccessUserFrom(instance.Author.UserMap[_configSettings.UserColumnName]);

            var assignee = instance.Assignee == null ? null : await _dbService.GetEasyAccessUserFrom(instance.Assignee.UserMap[_configSettings.UserColumnName]);

            var newTopic = new Topic()
            {
                Status   = instance.Status,
                Priority = instance.Priority,

                AuthorId    = author?.Id,
                AuthorName  = author?.Name,
                AuthorEmail = author?.Email,

                AssignedToId    = assignee?.Id,
                AssignedToEmail = assignee?.Email,
                AssignedToName  = assignee?.Name,

                CreationDate = instance.Created,
                Title        = "[" + instance.MessageOrigin.Split('_')[0] + "] | " + instance.Summary,
                TopicType    = instance.Type,
                ProjectId    = projectId,
                Labels       = instance.Labels
            };

            return(newTopic);
        }
        public static bool OfInterest(IStandardInstance contextMessage, string systemIdentifier)
        {
            if (contextMessage.MessageOrigin.Equals(systemIdentifier))
            {
                return(false);
            }

            return(true);
        }
        public async Task <IStandardInstance> HandleUpdate(IStandardInstance instance)
        {
            if (instance.Identifiers.ContainsKey(InstanceKeyNames.EASY_ACCESS_TOPIC))
            {
                var updatedInstance = await _resourceService.UpdateInstanceAsync(instance);

                return(updatedInstance);
            }
            return(null);
        }
Exemplo n.º 4
0
        public async Task <IStandardInstance> HandleCreation(IStandardInstance instance)
        {
            IStandardInstance handledInstance = new JiraStandardIssue();

            if (!instance.Identifiers.ContainsKey(InstanceKeyNames.JIRA_ISSUE))
            {
                handledInstance = await _resourceService.CreateInstanceAsync(instance);

                await _resourcePublisher.PublishKeyMap(instance.Identifiers);
            }
            return(handledInstance);
        }
        public async Task <IStandardInstance> HandleCreation(IStandardInstance instance)
        {
            IStandardInstance handledInstance = new StandardTopic();

            if (!instance.Identifiers.ContainsKey(InstanceKeyNames.EASY_ACCESS_TOPIC))
            {
                Debug.WriteLine("Creating new Topic from instance from: " + instance.MessageOrigin);
                handledInstance = await _resourceService.CreateInstanceAsync(instance);

                await _resourcePublisher.PublishKeyMap(instance.Identifiers);
            }
            return(handledInstance);
        }
        private async Task UpdateStatusAndPriority(IStandardInstance instance, Topic updatedTopic)
        {
            var modifiedUser = (instance.ModifiedUser == null) ? null : await _dbService.GetEasyAccessUserFrom(instance.ModifiedUser.UserMap[_settings.UserColumnName]);

            if (!(updatedTopic.Status?.ToLower() == instance.Status?.ToLower()))
            {
                await UpdateStatusOfTopic(updatedTopic, instance.Status, modifiedUser);
            }

            if (!(updatedTopic.Priority?.ToLower() == instance.Priority?.ToLower()))
            {
                await UpdatePriorityOfTopic(updatedTopic, instance.Priority, modifiedUser);
            }
        }
        public async Task <IStandardInstance> UpdateInstanceAsync(IStandardInstance instance)
        {
            try
            {
                string projectId = await ProjectIdProvider.GetProjectId(instance.Identifiers, await _dbService.GetAllProjectMappings());

                string requestUri = "projects/" + projectId + "/topics/" + instance.Identifiers[InstanceKeyNames.EASY_ACCESS_TOPIC].Id;

                //fetch the old topic first
                var oldTopicResponse = await _resourceClient.RestClient.GetAsync(requestUri);

                if (!oldTopicResponse.IsSuccessStatusCode)
                {
                    throw new ResourceException("Error getting instance at " + requestUri + ". StatusCode=" + oldTopicResponse.StatusCode);
                }

                var oldTopic = await oldTopicResponse.Content.ReadAsAsync <Topic>();

                //map the instance and merge it into the old topic
                var topicToBeUpdated = await _instanceMapper.ToUpdatedSpecialObject(instance, oldTopic);

                string json = topicToBeUpdated.ToJson();

                Debug.WriteLine("Topic to be updated: id=" + topicToBeUpdated.Id + ", projectId=" + topicToBeUpdated.ProjectId + ", title=" + topicToBeUpdated.Title);

                //update the topic
                var updatedTopicResponse = await _resourceClient.RestClient.PutAsync(requestUri, new StringContent(json, Encoding.UTF8,
                                                                                                                   "application/json"));

                if (!updatedTopicResponse.IsSuccessStatusCode)
                {
                    throw new ResourceException("Error updating instance with id=" + topicToBeUpdated.Id + ". StatusCode=" + updatedTopicResponse.StatusCode);
                }

                var updatedTopic = await updatedTopicResponse.Content.ReadAsAsync <Topic>();

                //EasyAccess status and priority is updated via comments.
                await UpdateStatusAndPriority(instance, updatedTopic);

                Debug.WriteLine("Topic was updated.");
            }
            catch (Exception e)
            {
                Debug.WriteLine("Error updating topic...");
                Debug.WriteLine(e.Message, e.StackTrace);
            }

            return(instance);
        }
        public async Task <IStandardInstance> UpdateInstanceAsync(IStandardInstance instance)
        {
            var issueToBeUpdated = await _resourceClient.RestClient.Issues.GetIssueAsync(instance.Identifiers[InstanceKeyNames.JIRA_ISSUE].Id);

            var updatedIssue = await _issueMapper.ToUpdatedSpecialObject(instance, issueToBeUpdated);

            await updatedIssue.SaveChangesAsync();

            if (instance.Status != null && instance.Status.ToLower() != updatedIssue.Status?.Name?.ToLower())
            {
                await updatedIssue.WorkflowTransitionAsync(instance.Status);
            }

            return(null);
        }
        private static string GetTitle(IStandardInstance instance)
        {
            var summary = instance.Summary;

            if (summary.StartsWith("[EasyAccess]"))
            {
                return(summary.Substring(summary.IndexOf('|') + 1));
            }
            else if (summary.StartsWith('[') && summary.Contains("] | "))
            {
                return(summary);
            }
            else
            {
                return("[" + instance.MessageOrigin.Split('_')[0] + "] | " + summary);
            }
        }
        public static Issue ToUpdatedJiraIssue(IStandardInstance instance, Jira jiraClient, Issue oldIssue)
        {
            string summary = GetSummary(instance);

            oldIssue.Type    = instance.Type;
            oldIssue.Summary = summary;

            oldIssue.Reporter = instance.Author.UserMap[userColumnName];
            oldIssue.Priority = instance.Priority;

            try
            {
                oldIssue.Assignee = instance.Assignee.UserMap[userColumnName];
            }
            catch (Exception e)
            {
                Debug.WriteLine("No assigned user");
            }

            return(oldIssue);
        }
        public static Issue ToNewJiraIssue(IStandardInstance instance, Jira jiraClient, string projectKey)
        {
            var jiraIssue = new Issue(jiraClient, projectKey)
            {
                Type     = instance.Type,
                Reporter = instance.Author.UserMap[userColumnName],
                Summary  = "[" + instance.MessageOrigin.Split('_')[0] + "] | " + instance.Summary,
                Priority = instance.Priority
            };

            try
            {
                jiraIssue.Assignee = instance.Assignee.UserMap[userColumnName];
            } catch (Exception e)
            {
                Debug.WriteLine("No assigned user");
            }

            foreach (var identifier in instance.Identifiers)
            {
                if (identifier.Value.Id != null)
                {
                    try
                    {
                        jiraIssue[identifier.Key + "Id"]  = identifier.Value.Id;
                        jiraIssue[identifier.Key + "Url"] = identifier.Value.Url;
                    }
                    catch (Exception e)
                    {
                        Debug.WriteLine("Error adding identifier to field:");
                        Debug.WriteLine(e.StackTrace);
                    }
                }
            }

            return(jiraIssue);
        }
        public async Task <IStandardInstance> CreateInstanceAsync(IStandardInstance instance)
        {
            try
            {
                var newTopic = await _instanceMapper.ToNewSpecialObject(instance);

                string requestUri = "projects/" + newTopic.ProjectId + "/topics";

                string json = newTopic.ToJson();

                Debug.WriteLine("creating topic: projectId=" + newTopic.ProjectId + ", title=" + newTopic.Title);

                var response = await _resourceClient.RestClient.PostAsync(requestUri, new StringContent(json, Encoding.UTF8,
                                                                                                        "application/json"));

                var createdTopic = await response.Content.ReadAsAsync <Topic>();

                var topicUrl = "Project/" + createdTopic.ProjectId + "/Topics#/list/topic/" + createdTopic.Id;

                instance.Identifiers.Add(InstanceKeyNames.EASY_ACCESS_TOPIC, new Identifiers()
                {
                    Id        = createdTopic.Id,
                    ProjectId = createdTopic.ProjectId,
                    Url       = _settings.HomeUri + topicUrl
                });

                await UpdateInstanceIdMap(instance.Identifiers);

                return(instance);
            }
            catch (Exception e)
            {
                Debug.WriteLine("Failed to create instance..", e.StackTrace);
            }
            return(null);
        }
        public async Task <Topic> ToUpdatedSpecialObject(IStandardInstance instance, Topic oldTopic)
        {
            var assignee = instance.Assignee == null ? null : await _dbService.GetEasyAccessUserFrom(instance.Assignee.UserMap[_configSettings.UserColumnName]);

            var author = instance.Author == null ? null : await _dbService.GetEasyAccessUserFrom(instance.Author.UserMap[_configSettings.UserColumnName]);

            var result = oldTopic;

            result.TopicType = instance.Type;

            result.Title = GetTitle(instance);

            result.AssignedToId    = assignee?.Id;
            result.AssignedToName  = assignee?.Name;
            result.AssignedToEmail = assignee?.Email;

            result.AuthorId    = author?.Id;
            result.AuthorEmail = author?.Email;
            result.AuthorName  = author?.Name;

            result.Labels = instance.Labels;

            return(result);
        }
Exemplo n.º 14
0
        public async Task <IStandardInstance> CreateInstanceAsync(IStandardInstance instance)
        {
            var newJiraIssue = await _issueMapper.ToNewSpecialObject(instance);

            try
            {
                var createdIssue = await newJiraIssue.SaveChangesAsync();

                try
                {
                    if (instance.Status != null)
                    {
                        await createdIssue.WorkflowTransitionAsync(instance.Status);
                    }
                }
                catch (Exception e)
                {
                    Debug.WriteLine("Error setting status. Value of status in instance: " + instance.Status);
                    Debug.WriteLine(e.StackTrace);
                }

                instance.Identifiers[InstanceKeyNames.JIRA_ISSUE] = new Identifiers()
                {
                    Id        = createdIssue.Key.Value,
                    ProjectId = createdIssue.Project,
                    Url       = _configSettings.HomeUri + "browse/" + createdIssue.Key.Value
                };
            }
            catch (Exception e)
            {
                Debug.WriteLine("Failed to save new issue...");
                Debug.WriteLine(e.StackTrace);
            }

            return(instance);
        }
 public void DeleteInstanceAsync(IStandardInstance instance)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 16
0
        public async Task <IStandardInstance> HandleUpdate(IStandardInstance instance)
        {
            var handledInstance = await _resourceService.UpdateInstanceAsync(instance);

            return(handledInstance);
        }
Exemplo n.º 17
0
 public async Task HandleDeletion(IStandardInstance instance)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 18
0
        public async Task <string> ConsumeServiceBus1()
        {
            var receiver = new MessageReceiver(connectionString, QueName, ReceiveMode.ReceiveAndDelete,
                                               RetryPolicy.NoRetry, 1);

            IList <Message> messagesFromSrvcBus = await receiver.ReceiveAsync(1);

            string msgContent = Encoding.UTF8.GetString(messagesFromSrvcBus[0].Body);

            IStandardInstance strdMsg = JsonConvert.DeserializeObject <IStandardInstance>(msgContent);

            Topic tpc = new Topic();
            HttpResponseMessage response = new HttpResponseMessage();

            if (strdMsg.Action == "created")
            {
                tpc = mapx.ConvertToTopic(strdMsg);

                var values = new Dictionary <string, string>
                {
                    { "title", tpc.Title },
                    { "qguid", tpc.QGuid },
                    { "projectId", tpc.ProjectId },
                    { "AuthorName", tpc.AuthorName },
                    { "AuthorEmail", tpc.AuthorEmail },
                    { "CreationDate", tpc.CreationDate }
                };
                var client = new HttpClient();
                client.BaseAddress = new Uri("https://topics.quadridcm.com/api/");
                client.DefaultRequestHeaders.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

                var content = new FormUrlEncodedContent(values);
                response = await client.PostAsync("projects/" + tpc.ProjectId + "/topics", content);
            }
            else if (strdMsg.Action == "updated")
            {
                tpc = mapx.ConvertToTopic(strdMsg);

                var values = new Dictionary <string, string>
                {
                    { "title", tpc.Title },
                    { "qguid", tpc.QGuid },
                    { "id", tpc.Id },
                    { "projectId", tpc.ProjectId },
                    { "AuthorName", tpc.AuthorName },
                    { "AuthorEmail", tpc.AuthorEmail },
                    { "CreationDate", tpc.CreationDate }
                };
                var client = new HttpClient();
                client.BaseAddress = new Uri("https://topics.quadridcm.com/api/");
                client.DefaultRequestHeaders.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

                var content = new FormUrlEncodedContent(values);
                response = await client.PutAsync("projects/" + tpc.ProjectId + "/topics/" + tpc.Id, content);
            }



            return(response.ToString());
        }
Exemplo n.º 19
0
        public async Task ConsumeServiceBus()
        {
            var managementClient = new ManagementClient(connectionString);
            var queue            = await managementClient.GetQueueRuntimeInfoAsync(QueName);

            var x = (int)queue.MessageCount;

            var receiver = new MessageReceiver(connectionString, QueName, ReceiveMode.ReceiveAndDelete,
                                               RetryPolicy.NoRetry, x);

            IList <Message> messagesFromSrvcBus = await receiver.ReceiveAsync(x);

            for (var i = 0; i < x; i++)
            {
                string msgContent = Encoding.UTF8.GetString(messagesFromSrvcBus[i].Body);

                IStandardMessage strdMsg = JsonConvert.DeserializeObject <IStandardMessage>(msgContent);

                Topic             tpc;
                CommentEasyAccess cmtEa;
                await receiver.CloseAsync();

                if (strdMsg.Action == "created")
                {
                    IStandardInstance strdInstance = JsonConvert.DeserializeObject <IStandardInstance>(msgContent);

                    tpc = mapx.ConvertToTopic(strdInstance);

                    var values = new Dictionary <string, string>
                    {
                        { "title", tpc.Title },
                        { "qguid", tpc.QGuid },
                        { "projectId", tpc.ProjectId },
                        { "AuthorName", tpc.AuthorName },
                        { "AuthorEmail", tpc.AuthorEmail },
                        { "CreationDate", tpc.CreationDate }
                    };
                    var client = new HttpClient();
                    client.BaseAddress = new Uri("https://topics.quadridcm.com/api/");
                    client.DefaultRequestHeaders.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

                    var content  = new FormUrlEncodedContent(values);
                    var response = await client.PostAsync("projects/" + tpc.ProjectId + "/topics", content);
                }
                else if (strdMsg.Action == "updated")
                {
                    IStandardInstance strdInstance = JsonConvert.DeserializeObject <IStandardInstance>(msgContent);

                    tpc = mapx.ConvertToTopic(strdInstance);

                    var values = new Dictionary <string, string>
                    {
                        { "title", tpc.Title },
                        { "qguid", tpc.QGuid },
                        { "id", tpc.Id },
                        { "projectId", tpc.ProjectId },
                        { "AuthorName", tpc.AuthorName },
                        { "AuthorEmail", tpc.AuthorEmail },
                        { "CreationDate", tpc.CreationDate }
                    };
                    var client = new HttpClient();
                    client.BaseAddress = new Uri("https://topics.quadridcm.com/api/");
                    client.DefaultRequestHeaders.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

                    var content  = new FormUrlEncodedContent(values);
                    var response = await client.PutAsync("projects/" + tpc.ProjectId + "/topics/" + tpc.Id, content);
                }
                else if (strdMsg.Action == "commented")
                {
                    IstandardComment strdComment = JsonConvert.DeserializeObject <IstandardComment>(msgContent);


                    cmtEa = mapx.ConvertCommentEasyAccess(strdComment);

                    var values = new Dictionary <string, string>
                    {
                        { "topicGuid", cmtEa.Id },
                        { "projectId", cmtEa.ProjectId },
                        { "content", cmtEa.Content },
                        { "date", cmtEa.Date },
                    };
                    var client = new HttpClient();
                    client.BaseAddress = new Uri("https://topics.quadridcm.com/api/");
                    client.DefaultRequestHeaders.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

                    var content  = new FormUrlEncodedContent(values);
                    var response = await client.PostAsync("projects/" + cmtEa.ProjectId + "/topics/" + cmtEa.Id + "/comments", content);
                }
            }
        }
Exemplo n.º 20
0
 public async void DeleteInstanceAsync(IStandardInstance instance)
 {
     await _resourceClient.RestClient.Issues.DeleteIssueAsync(instance.Identifiers[InstanceKeyNames.JIRA_ISSUE].Id);
 }