25590f99da7cd6b2b029aafe6de0712f83ba1c48
tdreszer
  Fri Oct 29 13:55:58 2010 -0700
Moved mdb/cv terms white list to mdb library code.  Now it can be used both by trackSearch and by metadata '...' table which will have links for select terms to hgEncodeVocab.
diff --git src/hg/hgTracks/searchTracks.c src/hg/hgTracks/searchTracks.c
index 41dee50..8db7846 100644
--- src/hg/hgTracks/searchTracks.c
+++ src/hg/hgTracks/searchTracks.c
@@ -168,125 +168,50 @@
     {
     ix++;
     labels[ix] = pair->name;
     values[ix] = pair->val;
     freeMem(pair);
     }
 *pLabels = labels;
 *pTerms = values;
 return count;
 }
 
 static int metaDbVars(struct sqlConnection *conn, char *** metaVars, char *** metaLabels)
 // Search the assemblies metaDb table; If name == NULL, we search every metadata field.
 {
 char query[256];
-#define WHITE_LIST_COUNT 35
-#ifdef WHITE_LIST_COUNT
-#define WHITE_LIST_VAR 0
-#define WHITE_LIST_LABEL 1
-char *whiteList[WHITE_LIST_COUNT][2] = {
-    {"age",              "Age of experimental organism"},
-    {"antibody",         "Antibody or target protein"},
-    {"origAssembly",     "Assembly originally mapped to"},
-    {"cell",             "Cell, tissue or DNA sample"},
-    {"localization",     "Cell compartment"},
-    {"control",          "Control or Input for ChIPseq"},
-    //{"controlId",        "ControlId - explicit relationship"},
-    {"dataType",         "Experiment type"},
-    {"dataVersion",      "ENCODE release"},
-    //{"fragLength",       "Fragment Length for ChIPseq"},
-    //{"freezeDate",       "Gencode freeze date"},
-    //{"level",            "Gencode level"},
-    //{"annotation",       "Gencode annotation"},
-    {"geoSample",        "GEO accession"},
-    {"growthProtocol",   "Growth Protocol"},
-    {"lab",              "Lab producing data"},
-    {"labVersion",       "Lab specific details"},
-    {"labExpId",         "Lab specific identifier"},
-    {"softwareVersion",  "Lab specific informatics"},
-    {"protocol",         "Library Protocol"},
-    {"mapAlgorithm",     "Mapping algorithm"},
-    {"readType",         "Paired/Single reads lengths"},
-    {"grant",            "Principal Investigator"},
-    {"replicate",        "Replicate number"},
-    //{"restrictionEnzyme","Restriction Enzyme used"},
-    //{"ripAntibody",      "RIP Antibody"},
-    //{"ripTgtProtein",    "RIP Target Protein"},
-    {"rnaExtract",       "RNA Extract"},
-    {"seqPlatform",      "Sequencing Platform"},
-    {"setType",          "Experiment or Input"},
-    {"sex",              "Sex of organism"},
-    {"strain",           "Strain of organism"},
-    {"subId",            "Submission Id"},
-    {"treatment",        "Treatment"},
-    {"view",             "View - Peaks or Signals"},
-};
-// FIXME: The whitelist should be a table or ra
-// FIXME: The whitelist should be in list order
-// FIXME: Should read in list, then verify that an mdb val exists.
+struct slPair *oneTerm,*whiteList = mdbCvWhiteList(TRUE,FALSE);
+int count =0, whiteCount = slCount(whiteList);
+char **retVar = needMem(sizeof(char *) * whiteCount);
+char **retLab = needMem(sizeof(char *) * whiteCount);
 
-char **retVar = needMem(sizeof(char *) * WHITE_LIST_COUNT);
-char **retLab = needMem(sizeof(char *) * WHITE_LIST_COUNT);
-int ix,count;
-for(ix=0,count=0;ix<WHITE_LIST_COUNT;ix++)
+for(oneTerm=whiteList;oneTerm!=NULL;oneTerm=oneTerm->next)
     {
-    safef(query, sizeof(query), "select count(*) from metaDb where var = '%s'",whiteList[ix][WHITE_LIST_VAR]);
+    safef(query, sizeof(query), "select count(*) from metaDb where var = '%s'",oneTerm->name);
     if(sqlQuickNum(conn,query) > 0)
         {
-        retVar[count] = whiteList[ix][WHITE_LIST_VAR];
-        retLab[count] = whiteList[ix][WHITE_LIST_LABEL];
+        retVar[count] = oneTerm->name;
+        retLab[count] = oneTerm->val;
         count++;
         }
     }
-if(count == 0)
-    {
-    freez(&retVar);
-    freez(&retLab);
-    }
-*metaVars = retVar;
-*metaLabels = retLab;
-return count;
+// Don't do it, unless you clone strings above:  slPairFreeValsAndList(&whileList);
 
-#else///ifndef WHITE_LIST_COUNT
-
-char **retVar;
-char **retLab;
-struct slName *el, *varList = NULL;
-struct sqlResult *sr = NULL;
-char **row = NULL;
-
-safef(query, sizeof(query), "select distinct var from metaDb order by var");
-sr = sqlGetResult(conn, query);
-while ((row = sqlNextRow(sr)) != NULL)
-    slNameAddHead(&varList, row[0]);
-sqlFreeResult(&sr);
-retVar = needMem(sizeof(char *) * slCount(varList));
-retLab = needMem(sizeof(char *) * slCount(varList));
-slReverse(&varList);
-//slNameSort(&varList);
-int count = 0;
-for (el = varList; el != NULL; el = el->next)
-    {
-    retVar[count] = el->name;
-    retLab[count] = el->name;
-    count++;
-    }
 *metaVars = retVar;
-*whiteLabels = retLab;
+*metaLabels = retLab;
 return count;
-#endif///ndef WHITE_LIST_COUNT
 }
 
 static int printMdbSelects(struct sqlConnection *conn,struct cart *cart,boolean simpleSearch,char ***pMdbVar,char ***pMdbVal,int *numMetadataNonEmpty,int cols)
 // Prints a table of mdb selects if appropriate and returns number of them
 {
 // figure out how many metadata selects are visible.
 int delSearchSelect = cartUsualInt(cart, TRACK_SEARCH_DEL_ROW, 0);   // 1-based row to delete
 int addSearchSelect = cartUsualInt(cart, TRACK_SEARCH_ADD_ROW, 0);   // 1-based row to insert after
 int numMetadataSelects = 0;
 char **mdbVar = NULL;
 char **mdbVal = NULL;
 char **mdbVars = NULL;
 char **mdbVarLabels = NULL;
 int i, count = metaDbVars(conn, &mdbVars, &mdbVarLabels);