private int ProcessExportFile(string FileName) { string SQL = BuildConversationInsertStatement(); int assetCounter = 0; XDocument xmlDoc = XDocument.Load(FileName); var assets = from asset in xmlDoc.Root.Elements("ConversationPost") select asset; foreach (var asset in assets) { using (SqlCommand cmd = new SqlCommand()) { cmd.Connection = _sqlConn; cmd.CommandText = SQL; cmd.CommandType = System.Data.CommandType.Text; cmd.Parameters.AddWithValue("@AssetOID", asset.Element("ObjectID").Value); cmd.Parameters.AddWithValue("@AssetState", "Active"); cmd.Parameters.AddWithValue("@AuthoredAt", ConvertRallyDate(asset.Element("CreationDate").Value)); cmd.Parameters.AddWithValue("@Author", GetMemberOIDFromDB(GetRefValue(asset.Element("User").Attribute("ref").Value))); cmd.Parameters.AddWithValue("@Mentions", GetRefValue(asset.Element("Artifact").Attribute("ref").Value)); cmd.Parameters.AddWithValue("@Conversation", asset.Element("ObjectID").Value); cmd.Parameters.AddWithValue("@InReplyTo", DBNull.Value); cmd.Parameters.AddWithValue("@BaseAssetType", GetBaseAssetType(asset.Element("Artifact").Attribute("type").Value)); cmd.Parameters.AddWithValue("@Index", asset.Element("PostNumber").Value); //Convert HTML content to plain text. HtmlToText htmlParser = new HtmlToText(); cmd.Parameters.AddWithValue("@Content", htmlParser.Convert(asset.Element("Text").Value)); cmd.ExecuteNonQuery(); } assetCounter++; } return assetCounter; }
protected bool ProcessComments(XElement Comments, string AssetOID, string AssetType) { if (Comments != null && Comments.HasElements) { var comments = from comment in Comments.Descendants("comment") select comment; string SQL = BuildConversationInsert(); foreach (var comment in comments) { using (SqlCommand cmd = new SqlCommand()) { cmd.Connection = _sqlConn; cmd.CommandText = SQL; cmd.CommandType = CommandType.Text; cmd.Parameters.AddWithValue("@AssetOID", comment.Attribute("id").Value); cmd.Parameters.AddWithValue("@AssetState", "Active"); cmd.Parameters.AddWithValue("@AuthoredAt", ConvertRallyDate(comment.Attribute("created").Value)); cmd.Parameters.AddWithValue("@Author", GetMemberOIDFromDB(GetRefValue(comment.Attribute("author").Value))); cmd.Parameters.AddWithValue("@Mentions", AssetOID); cmd.Parameters.AddWithValue("@Conversation", comment.Attribute("id").Value); cmd.Parameters.AddWithValue("@InReplyTo", DBNull.Value); cmd.Parameters.AddWithValue("@BaseAssetType", AssetType); cmd.Parameters.AddWithValue("@Index", "1"); //Convert HTML content to plain text. HtmlToText htmlParser = new HtmlToText(); cmd.Parameters.AddWithValue("@Content", htmlParser.Convert(comment.Value)); cmd.ExecuteNonQuery(); } } } return false; }
private int ProcessExportFile(string FileName) { string SQL = BuildDefectInsertStatement(); int assetCounter = 0; XDocument xmlDoc = XDocument.Load(FileName); var assets = from asset in xmlDoc.XPathSelectElements("rss/channel/item") select asset; foreach (var asset in assets) { //Check to see if this is an Defect, if not continue to the next string type; var xType = asset.Element("type"); if (xType != null) { type = xType.Value.ToString().ToLower(); } else { continue; } if (!_config.JiraConfiguration.DefectIssueTypes.Contains(type)) continue; if (!string.IsNullOrEmpty(GetAssetFromDB("Defect-" + asset.Element("key").Value, "Defects") as string)) continue; bool comments = ProcessComments(asset.Element("comments"), "Defect-" + asset.Element("key").Value, "Defect"); using (SqlCommand cmd = new SqlCommand()) { cmd.Connection = _sqlConn; cmd.CommandText = SQL; cmd.CommandType = System.Data.CommandType.Text; cmd.Parameters.AddWithValue("@AssetOID", "Defect-" + asset.Element("key").Value); cmd.Parameters.AddWithValue("@AssetNumber", asset.Element("key").Value); cmd.Parameters.AddWithValue("@Name", asset.Element("summary").Value); cmd.Parameters.AddWithValue("@Scope", "Scope-1"); cmd.Parameters.AddWithValue("@AssetState", GetDefectState(asset.Element("status").Value)); cmd.Parameters.AddWithValue("@Status", GetMappedListValue("Defect", "Status", asset.Element("status").Value)); //MTB - New Description string businessRules = GetCustomFieldValue(asset.Element("customfields"), "Business Rules"); string userStory = GetCustomFieldValue(asset.Element("customfields"), "User Story"); string description = asset.Element("description").Value; if (string.IsNullOrEmpty(description)) { description = string.Empty; } if (!string.IsNullOrEmpty(userStory)) { description = description + "<br /><br /><strong>User Story:</strong><br />" + userStory; } if (!string.IsNullOrEmpty(businessRules)) { description = description + "<br /><br /><strong>Business Rules:</strong><br />" + businessRules; } cmd.Parameters.AddWithValue("@Description", AddLinkToDescription(description, asset.Element("link").Value)); string priority = asset.Element("priority").Value; if (string.IsNullOrEmpty(priority) == false) { cmd.Parameters.AddWithValue("@Priority", GetMappedListValue("Defect", "Priority", priority)); } cmd.Parameters.AddWithValue("@Owners", asset.Element("assignee").Value); cmd.Parameters.AddWithValue("@Timebox", "Timebox-" + GetCustomFieldValue(asset.Element("customfields"), "Sprint")); if (!string.IsNullOrEmpty(_config.JiraConfiguration.JiraBacklogGroupReference)) { string featuregroupname = GetCustomFieldValue(asset.Element("customfields"), _config.JiraConfiguration.JiraBacklogGroupReference); if (!string.IsNullOrEmpty(featuregroupname)) { ProcessFeatureGroup(featuregroupname, "Scope-1"); cmd.Parameters.AddWithValue("@Parent", featuregroupname); } else { cmd.Parameters.AddWithValue("@Parent", DBNull.Value); } } else { cmd.Parameters.AddWithValue("@Parent", DBNull.Value); } if (!string.IsNullOrEmpty(_config.JiraConfiguration.JiraTeamReference)) { string teamname = GetCustomFieldValue(asset.Element("customfields"), _config.JiraConfiguration.JiraTeamReference); if (!string.IsNullOrEmpty(teamname)) { ProcessTeam(teamname); cmd.Parameters.AddWithValue("@Team", teamname); } else { cmd.Parameters.AddWithValue("@Team", DBNull.Value); } } else { cmd.Parameters.AddWithValue("@Team", DBNull.Value); } string epic = GetCustomFieldValue(asset.Element("customfields"), "Epic Link"); if (string.IsNullOrEmpty(epic) == false) { cmd.Parameters.AddWithValue("@Super", "Epic-" + epic); } else { cmd.Parameters.AddWithValue("@Super", DBNull.Value); } string estimate = GetCustomFieldValue(asset.Element("customfields"), "Points"); if (string.IsNullOrEmpty(estimate) == false) { cmd.Parameters.AddWithValue("@Estimate", estimate); } else { cmd.Parameters.AddWithValue("@Estimate", DBNull.Value); } //cmd.Parameters.AddWithValue("@Order", Convert.ToInt64(GetCustomFieldValue(asset.Element("customfields"), "Studio Priority"))); // use Global Rank (jira 6.x) cmd.Parameters.AddWithValue("@Order", Convert.ToInt64(GetCustomFieldValue(asset.Element("customfields"), "Global Rank"))); cmd.Parameters.AddWithValue("@FoundBy", (asset.Element("reporter").Attribute("username").Value)); cmd.Parameters.AddWithValue("@FoundInBuild", DBNull.Value); cmd.Parameters.AddWithValue("@FixedInBuild", DBNull.Value); HtmlToText htmlParser = new HtmlToText(); cmd.Parameters.AddWithValue("@Environment", htmlParser.Convert(asset.Element("environment").Value)); string resolution = string.Empty; XElement xResolution = asset.Element("resolution"); if (xResolution != null) { resolution = xResolution.Value; if (string.IsNullOrEmpty(resolution) == false) { cmd.Parameters.AddWithValue("@ResolutionReason", htmlParser.Convert(resolution)); } } // MTB - Disney - Process Goals // first process labels string labels = ProcessLabels(asset.Element("labels"), ";"); string goals = string.Empty; if (!String.IsNullOrEmpty(labels)) { goals = labels; ProcessLabelsAsGoals(labels, "Defect-" + asset.Element("key").Value, "Scope-1"); } // next process component var xElement = asset.Element("component"); string component = string.Empty; if (xElement != null) { if (!string.IsNullOrEmpty(xElement.Value)) { component = xElement.Value; } } if (!string.IsNullOrEmpty(component)) { ProcessLabelsAsGoals(component, "Defect-" + asset.Element("key").Value, "Scope-1"); goals = goals + component + ";"; } if (!string.IsNullOrEmpty(goals)) { cmd.Parameters.AddWithValue("@Goals", goals); } else { cmd.Parameters.AddWithValue("@Goals", DBNull.Value); } string dependencies = ProcessDependencies(asset.Element("issuelinks"), "outwardlinks"); if (String.IsNullOrEmpty(dependencies)) { cmd.Parameters.AddWithValue("@Dependencies", DBNull.Value); } else { cmd.Parameters.AddWithValue("@Dependencies", dependencies); } cmd.Parameters.AddWithValue("@Dependants", DBNull.Value); foreach (var customField in _config.CustomFieldsToMigrate) { if (customField.AssetType == "Defect") { var fieldValue = GetCustomFieldValue(asset.Element("customfields"), customField.SourceName); if (string.IsNullOrEmpty(fieldValue) == false) CreateCustomField("Defect-" + asset.Element("key").Value, customField.SourceName, customField.DataType, fieldValue); } } cmd.ExecuteNonQuery(); } //int linkCnt = SaveAttachmentLinks(asset.Element("key").Value, "Defect", asset.Element("attachments")); //linkCnt++; int linkCnt = 0; string compsAndWireframes = GetCustomFieldValue(asset.Element("customfields"), "Comps and Wireframes"); if (!string.IsNullOrEmpty(compsAndWireframes)) { linkCnt++; StringBuilder compLinkAssetOid = new StringBuilder(); compLinkAssetOid.Append(asset.Element("key").Value); compLinkAssetOid.Append("-"); compLinkAssetOid.Append(linkCnt.ToString()); SaveLink(compLinkAssetOid.ToString(), asset.Element("key").Value, "Defect", "true", compsAndWireframes, "Comps and Wireframes"); } linkCnt++; StringBuilder linkAssetOid = new StringBuilder(); linkAssetOid.Append(asset.Element("key").Value); linkAssetOid.Append("-"); linkAssetOid.Append(linkCnt.ToString()); SaveLink(linkAssetOid.ToString(), asset.Element("key").Value, "Defect", "true", asset.Element("link").Value, "Jira"); assetCounter++; } return assetCounter; }