Azavea.NijPredictivePolicing.ACSAlchemistLibrary.Transfer.AcsDataManager.GetRequestedVariables C# (CSharp) Method

GetRequestedVariables() public method

Currently rebuilds the requested variables table every time
public GetRequestedVariables ( DbConnection conn ) : DataTable
conn System.Data.Common.DbConnection
return System.Data.DataTable
        public DataTable GetRequestedVariables(DbConnection conn)
        {
            _log.Debug("Processing requested variables... ");

            DataTable dt = null;
            if (!string.IsNullOrEmpty(DesiredVariablesFilename))
            {
                DesiredColumnsReader fileReader = new DesiredColumnsReader();
                bool importSucceeded = fileReader.ImportDesiredVariables(conn, DbClient,
                    this.DesiredVariablesFilename, DbConstants.TABLE_DesiredColumns);

                if (importSucceeded)
                {
                    string getRequestedCount = string.Format(
                      @"SELECT    * FROM ""{0}"" ;",
                      DbConstants.TABLE_DesiredColumns);
                    DataTable desiredVars = DataClient.GetMagicTable(conn, DbClient, getRequestedCount);
                    int numDesired = desiredVars.Rows.Count;

                    _log.DebugFormat("Variable file {0} imported successfully", this.DesiredVariablesFilename);
                    string getRequestedVariablesSQL = string.Format(
                      @"SELECT    columnMappings.CENSUS_TABLE_ID,
                                  columnMappings.COLNO,
                                  columnMappings.SEQNO,
                                  {0}.CUSTOM_COLUMN_NAME AS COLNAME
                        FROM      columnMappings, ""{0}""
                        WHERE     columnMappings.CENSUS_TABLE_ID = {0}.CENSUS_TABLE_ID;",
                        DbConstants.TABLE_DesiredColumns);

                    dt = DataClient.GetMagicTable(conn, DbClient, getRequestedVariablesSQL);

                    if ((dt == null) || (numDesired != dt.Rows.Count))
                    {
                        _log.Warn("I couldn't find one or more of the variables you requested.");
                        HashSet<string> foundVarsSet = new HashSet<string>();
                        if (dt != null)
                        {
                            foreach (DataRow dr in dt.Rows)
                            {
                                foundVarsSet.Add(dr["CENSUS_TABLE_ID"] as string);
                            }
                        }
                        foreach (DataRow dr in desiredVars.Rows)
                        {
                            var varName = dr["CENSUS_TABLE_ID"] as string;
                            if (!foundVarsSet.Contains(varName))
                            {
                                _log.ErrorFormat("Could not find requested variable \"{0}\"", varName);
                            }
                        }

                        _log.Debug("Processing requested variables... Done -- with errors");

                        //make tests pass
                        if (dt.Rows.Count == 0)
                            return null;

                        return dt;
                    }
                }
                else
                {
                    _log.Warn("Processing requested variables... Failed!");
                    return null;
                }
            }
            else
            {
                _log.Debug("No variables file specified");
            }

            _log.Debug("Processing requested variables... Done!");
            return dt;
        }

Usage Example

        private void AssertFailedImport(string filename, AcsDataManager man, DbConnection conn)
        {
            Assert.IsTrue(File.Exists(filename), "Could not find test file " + filename);
            man.DesiredVariablesFilename = filename;

            DataTable dt = man.GetRequestedVariables(conn);
            Assert.IsTrue(dt == null, "Non-null DataTable returned for file " + filename);
        }