/// <summary> /// Checks the field properties for a given field in an Epi 3.5.x view. /// </summary> /// <param name="view">The Epi Info 3.5.x view to check.</param> /// <param name="fieldRow">The row of field data that represents this field.</param> private void CheckFieldProperties(Epi.Epi2000.View view, DataRow fieldRow) { #region Input Validation if (view == null) { throw new ArgumentNullException("view"); } if (fieldRow == null) { throw new ArgumentNullException("fieldRow"); } #endregion // Input Validation string fieldName = fieldRow["Name"].ToString(); MetaFieldType fieldType = Epi.Epi2000.MetadataDbProvider.InferFieldType(fieldRow); if (!(fieldType == MetaFieldType.CommandButton || fieldType == MetaFieldType.Grid || fieldType == MetaFieldType.Group || fieldType == MetaFieldType.LabelTitle || fieldType == MetaFieldType.Mirror || fieldType == MetaFieldType.Relate) && fieldRow["Lists"] != DBNull.Value) { string lists = fieldRow["Lists"].ToString().Trim(); if (fieldType == MetaFieldType.Codes || fieldType == MetaFieldType.LegalValues || fieldType == MetaFieldType.CommentLegal) { if (lists.Contains("[") || lists.Contains("]")) { errorList.Add(ImportExportMessageType.Error, "3010", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E3010, fieldName, view.Name)); } else if (!lists.Contains("(") || !lists.Contains(")")) { errorList.Add(ImportExportMessageType.Error, "3011", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E3011, fieldName, view.Name)); } else { int parenIndex = lists.IndexOf('('); string properties = lists.Substring(0, parenIndex); if (properties.Contains("N") && properties.Contains("M")) { errorList.Add(ImportExportMessageType.Error, "3012", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E3012, fieldName, view.Name)); } } } } if (fieldType == MetaFieldType.Relate) { if (fieldRow["FormatString"] != DBNull.Value && !string.IsNullOrEmpty(fieldRow["FormatString"].ToString().Trim())) { errorList.Add(ImportExportMessageType.Notification, "6000", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_N6000, fieldName, view.Name)); } } }
/// <summary> /// Checks a given Epi Info 3.5.x view for source reference problems. /// </summary> /// <param name="view">The Epi Info 3.5.x view to check.</param> private void CheckViewSourceReferences(Epi.Epi2000.View view) { #region Input Validation if (view == null) { throw new ArgumentNullException("view"); } #endregion // Input Validation Epi.Data.IDbDriver db = sourceProject.CollectedData.GetDatabase(); DataTable viewMetaTable = db.Select(db.CreateQuery("SELECT [Name], [Type], [Datatable] FROM [" + view.Name + "] WHERE [Type] = 'SOURCE' AND [Name] LIKE 'CODE%'")); foreach (DataRow row in viewMetaTable.Rows) { string dataTableName = row["Datatable"].ToString(); string sourceName = row["Name"].ToString(); DataTable viewMetaTable1 = db.Select(db.CreateQuery("SELECT [Name], [Lists] FROM [" + view.Name + "] WHERE [Lists] LIKE '%" + sourceName + ",%'")); if (viewMetaTable1.Rows.Count == 0) { // There are a lot of these, and they have no effect on the upgrade process, so skip them... they're pointless to show to the user. //problems.Add(new KeyValuePair<ProjectUpgradeProblemType, string>(ProjectUpgradeProblemType.Notification, "View " + view.Name + " contains a SOURCE reference called " + sourceName + " that does not have a corresponding field.")); } else { if (string.IsNullOrEmpty(dataTableName)) { errorList.Add(ImportExportMessageType.Error, "1023", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E1023, view.Name, sourceName)); } else if (!db.TableExists(dataTableName)) { errorList.Add(ImportExportMessageType.Error, "1024", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E1024, view.Name, sourceName, dataTableName, dataTableName)); } } } }
/// <summary> /// Checks all the fields in a given Epi Info 3.5.x view for generic problems. /// </summary> /// <param name="view">The Epi Info 3.5.x view</param> /// <param name="db">The data driver associated with the view's project</param> private void CheckAllFields(Epi.Epi2000.View view, Epi.Data.IDbDriver db) { #region Input Validation if (view == null) { throw new ArgumentNullException("view"); } if (db == null) { throw new ArgumentNullException("db"); } #endregion // Input Validation List <DataTable> wideTables = new List <DataTable>(); bool hasTables = false; foreach (string wideTableName in view.TableNames) { if (!string.IsNullOrEmpty(wideTableName) && db.TableExists(wideTableName)) { DataTable wTable = db.GetTopTwoTable(wideTableName); wTable.TableName = wideTableName; wideTables.Add(wTable); hasTables = true; } } DataTable allFieldsTable = sourceProject.Metadata.GetFieldsAsDataTable(view.Name); foreach (DataRow fRow in allFieldsTable.Rows) { string fieldName = fRow["Name"].ToString(); CheckFieldProperties(view, fRow); MetaFieldType fieldType = Epi.Epi2000.MetadataDbProvider.InferFieldType(fRow); if (fieldType == MetaFieldType.CommandButton || fieldType == MetaFieldType.Grid || fieldType == MetaFieldType.Group || fieldType == MetaFieldType.LabelTitle || fieldType == MetaFieldType.Mirror || fieldType == MetaFieldType.Relate) { continue; } if (!hasTables) { continue; } string columnDataType = string.Empty; string wideTableName = string.Empty; foreach (DataTable wideTable in wideTables) { if (wideTable.Columns.Contains(fieldName)) { columnDataType = wideTable.Columns[fieldName].DataType.ToString(); wideTableName = wideTable.TableName; break; } } if (string.IsNullOrEmpty(columnDataType)) { if (fieldType != MetaFieldType.CommandButton && fieldType != MetaFieldType.Grid && fieldType != MetaFieldType.Group && fieldType != MetaFieldType.LabelTitle && fieldType != MetaFieldType.Mirror && fieldType != MetaFieldType.Relate) { errorList.Add(ImportExportMessageType.Error, "3002", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E3002, fieldName, view.Name)); } } else { switch (fieldType) { case MetaFieldType.Checkbox: if (!columnDataType.Equals("System.Boolean")) { errorList.Add(ImportExportMessageType.Error, "3005", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E3005, fieldName, view.Name, columnDataType)); } break; case MetaFieldType.YesNo: if (!(columnDataType.Equals("System.Byte") || columnDataType.Equals("System.Byte"))) { errorList.Add(ImportExportMessageType.Error, "3006", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E3006, fieldName, view.Name, columnDataType)); } break; case MetaFieldType.Codes: case MetaFieldType.CommentLegal: case MetaFieldType.LegalValues: case MetaFieldType.Text: case MetaFieldType.TextUppercase: if (!columnDataType.Equals("System.String")) { errorList.Add(ImportExportMessageType.Error, "3007", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E3007, fieldName, view.Name, columnDataType)); } break; case MetaFieldType.Number: if (!columnDataType.Equals("System.Single") && !columnDataType.Equals("System.Double")) { errorList.Add(ImportExportMessageType.Error, "3008", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E3008, fieldName, view.Name, columnDataType)); } break; case MetaFieldType.Date: case MetaFieldType.DateTime: case MetaFieldType.Time: if (!columnDataType.Equals("System.DateTime")) { errorList.Add(ImportExportMessageType.Error, "3009", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E3009, fieldName, view.Name, columnDataType)); } break; } } } }
/// <summary> /// Checks the columns in the view table for problems. /// </summary> /// <param name="view">The Epi Info 3.5.x view to check</param> private void CheckViewColumns(Epi.Epi2000.View view) { #region Input Validation if (view == null) { throw new ArgumentNullException("view"); } #endregion // Input Validation Epi.Data.IDbDriver db = sourceProject.CollectedData.GetDatabase(); DataTable viewMetaTable = db.Select(db.CreateQuery("SELECT * FROM [" + view.Name + "]")); if (!viewMetaTable.Columns.Contains("PageNumber")) { errorList.Add(ImportExportMessageType.Error, "1030", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E1030, view.Name)); } else if (!(viewMetaTable.Columns["PageNumber"].DataType.ToString().Equals("System.Byte") || viewMetaTable.Columns["PageNumber"].DataType.ToString().Equals("System.Int16") || viewMetaTable.Columns["PageNumber"].DataType.ToString().Equals("System.Int32"))) { errorList.Add(ImportExportMessageType.Error, "1031", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E1031, view.Name, viewMetaTable.Columns["PageNumber"].DataType.ToString())); } if (!viewMetaTable.Columns.Contains("Name")) { errorList.Add(ImportExportMessageType.Error, "1032", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E1032, view.Name)); } else if (!viewMetaTable.Columns["Name"].DataType.ToString().Equals("System.String")) { errorList.Add(ImportExportMessageType.Error, "1033", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E1033, view.Name, viewMetaTable.Columns["Name"].DataType.ToString())); } if (!viewMetaTable.Columns.Contains("Prompt")) { errorList.Add(ImportExportMessageType.Error, "1034", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E1034, view.Name)); } else if (!viewMetaTable.Columns["Prompt"].DataType.ToString().Equals("System.String")) { errorList.Add(ImportExportMessageType.Error, "1035", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E1035, view.Name, viewMetaTable.Columns["Prompt"].DataType.ToString())); } if (!viewMetaTable.Columns.Contains("Type")) { errorList.Add(ImportExportMessageType.Error, "1036", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E1036, view.Name)); } else if (!viewMetaTable.Columns["Type"].DataType.ToString().Equals("System.String")) { errorList.Add(ImportExportMessageType.Error, "1037", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E1037, view.Name, viewMetaTable.Columns["Type"].DataType.ToString())); } if (!viewMetaTable.Columns.Contains("Database")) { errorList.Add(ImportExportMessageType.Error, "1070", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E1070, view.Name)); } else if (!viewMetaTable.Columns["Database"].DataType.ToString().Equals("System.String")) { errorList.Add(ImportExportMessageType.Error, "1071", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E1071, view.Name, viewMetaTable.Columns["Database"].DataType.ToString())); } if (!viewMetaTable.Columns.Contains("Datafield")) { errorList.Add(ImportExportMessageType.Error, "1072", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E1072, view.Name)); } else if (!viewMetaTable.Columns["Datafield"].DataType.ToString().Equals("System.String")) { errorList.Add(ImportExportMessageType.Error, "1073", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E1073, view.Name, viewMetaTable.Columns["Datafield"].DataType.ToString())); } if (!viewMetaTable.Columns.Contains("Datatable")) { errorList.Add(ImportExportMessageType.Error, "1074", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E1074, view.Name)); } else if (!viewMetaTable.Columns["Datatable"].DataType.ToString().Equals("System.String")) { errorList.Add(ImportExportMessageType.Error, "1075", string.Format(ImportExportSharedStrings.UPGRADE_PROBLEM_CHECK_ERROR_E1075, view.Name, viewMetaTable.Columns["Datatable"].DataType.ToString())); } }