public override Resource SaveResource(Resource resource, string projectID = null)
        {
            Resource result = null;

            if (projectID != null)
            {
                if (_dataReader is SpecIfJiraDataReader)
                {
                    SpecIfJiraDataReader dataReader = _dataReader as SpecIfJiraDataReader;

                    Project jiraProject = dataReader.GetJiraProjectInfo(projectID);

                    string jiraTypeID = GetJiraTypeFromSpecIfResource(resource, projectID);

                    if (jiraProject != null && jiraTypeID != null)
                    {
                        string title = resource.GetPropertyValue("dcterms:title", _metadataReader);

                        string description = resource.GetPropertyValue("dcterms:description", _metadataReader);

                        SpecIfToJiraConverter specIfToJiraConverter = new SpecIfToJiraConverter();

                        Issue newIssue = new Issue
                        {
                            Fields = new Fields
                            {
                                Project = new Project
                                {
                                    ID = jiraProject.ID
                                },
                                Summary     = title,
                                Description = specIfToJiraConverter.ConvertDescription(description),
                                IssueType   = new IssueType
                                {
                                    ID = jiraTypeID
                                }
                            }
                        };

                        Task <Issue> issueCreateTask = _jiraClient.CreateJiraIssueAsync(newIssue);

                        issueCreateTask.Wait();

                        Issue newJiraResultIssue = issueCreateTask.Result;

                        if (newJiraResultIssue != null)
                        {
                            string newIssueGuid = JiraGuidConverter.ConvertToSpecIfGuid(newJiraResultIssue.Self, newJiraResultIssue.ID);

                            result = _dataReader.GetResourceByKey(new Key(newIssueGuid));
                        }
                    }
                }
            }

            return(result);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="classKey"></param>
        /// <param name="projectID">SpecIF project ID.</param>
        /// <returns></returns>
        private string GetJiraTypeFromSpecIfResource(Resource resource, string projectID)
        {
            string result = null;

            if (_dataReader is SpecIfJiraDataReader)
            {
                SpecIfJiraDataReader dataReader = _dataReader as SpecIfJiraDataReader;

                Project jiraProject = dataReader.GetJiraProjectInfo(projectID);

                if (jiraProject != null)
                {
                    if (resource.Class.ID == "RC-Requirement")
                    {
                        string perspecitve = resource.GetPropertyValue("SpecIF:Perspective", _metadataReader);

                        IssueType requirementIssueType;

                        if (!string.IsNullOrEmpty(perspecitve) && perspecitve == "V-perspective-1") // user
                        {
                            requirementIssueType = jiraProject.IssueTypes.Find(issueType => issueType.Name == "Customer Requirement");
                        }
                        else
                        {
                            requirementIssueType = jiraProject.IssueTypes.Find(issueType => issueType.Name == "Requirement");
                        }

                        if (requirementIssueType != null)
                        {
                            result = requirementIssueType.ID;
                        }
                    }
                }
            }

            return(result);
        }