85a520a7ab42a996e7102ce4bd9eeca56b1fce00
tdreszer
Tue Nov 2 14:56:34 2010 -0700
The '...' metadata table now links to term definitions and specific cv defined terms
diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index c33cfce..a4cd58a 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -122,110 +122,121 @@
if (isNotEmpty(tbOff) && sameString(nextWord(&tbOff), "off"))
return FALSE;
char *hint = " title='Open table schema in new window'";
if( label == NULL)
label = " View table schema";
struct trackDb *topLevel = trackDbTopLevelSelfOrParent(tdb);
printf(SCHEMA_LINKED, db, topLevel->grp, topLevel->track, tdb->table, hint, label);
return TRUE;
}
return FALSE;
}
char *controlledVocabLink(char *file,char *term,char *value,char *title, char *label,char *suffix)
// returns allocated string of HTML link to controlled vocabulary term
{
-#define VOCAB_LINK "%s"
-char *encFile = cgiEncode(file);
+#define VOCAB_LINK_WITH_FILE "%s"
+#define VOCAB_LINK "%s"
+struct dyString *dyLink = NULL;
char *encTerm = cgiEncode(term);
char *encValue = cgiEncode(value);
-struct dyString *dyLink = dyStringCreate(VOCAB_LINK,encFile,encTerm,encValue,title,label);
+if (file != NULL)
+ {
+ char *encFile = cgiEncode(file);
+ dyLink = dyStringCreate(VOCAB_LINK_WITH_FILE,encFile,encTerm,encValue,title,label);
+ freeMem(encFile);
+ }
+else
+ dyLink = dyStringCreate(VOCAB_LINK,encTerm,encValue,title,label);
if (suffix != NULL)
dyStringAppend(dyLink,suffix); // Don't encode since this may contain HTML
-freeMem(encFile);
freeMem(encTerm);
freeMem(encValue);
return dyStringCannibalize(&dyLink);
}
char *metadataAsHtmlTable(char *db,struct trackDb *tdb,boolean showLongLabel,boolean showShortLabel, struct hash *trackHash)
/* If metadata from metaDb exists, return string of html with table definition */
{
const struct mdbObj *safeObj = metadataForTable(db,tdb,NULL);
if (safeObj == NULL || safeObj->vars == NULL)
return NULL;
//struct dyString *dyTable = dyStringCreate("
",tdb->table);
struct dyString *dyTable = dyStringCreate("");
if(showLongLabel)
dyStringPrintf(dyTable,"%s |
",tdb->longLabel);
if(showShortLabel)
dyStringPrintf(dyTable,"shortLabel: | %s |
",tdb->shortLabel);
-//#define DONT_USE_CV_WHITELIST
-#ifndef DONT_USE_CV_WHITELIST
-// Need whiteListed cv terms and the cv.ra file
-struct slPair *oneTerm,*whiteList = mdbCvWhiteList(FALSE,TRUE); // Want terms that are defined in cv, not searchable via trackSearch
-char *cvFile = NULL;
-char *vocab = trackDbSetting(tdb, "controlledVocabulary");
-if(vocab != NULL)
- cvFile = firstWordInLine(cloneString(vocab));
-#endif///ndef DONT_USE_CV_WHITELIST
+// Get the hash of mdb and cv term types
+struct hash *cvTermTypes = mdbCvTermTypeHash();
struct mdbObj *mdbObj = mdbObjClone(safeObj); // Important if we are going to remove vars!
mdbObjRemoveVars(mdbObj,"composite project objType"); // Don't bother showing these (suggest: "composite project dataType view tableName")
mdbObjReorderVars(mdbObj,"grant lab dataType cell treatment antibody protocol replicate view setType inputType",FALSE); // Bring to front
mdbObjReorderVars(mdbObj,"subId submittedDataVersion dateSubmitted dateResubmitted dateUnrestricted dataVersion tableName fileName fileIndex",TRUE); // Send to back
struct mdbVar *mdbVar;
for (mdbVar=mdbObj->vars;mdbVar!=NULL;mdbVar=mdbVar->next)
{
if ((sameString(mdbVar->var,"fileName") || sameString(mdbVar->var,"fileIndex") )
&& trackDbSettingClosestToHome(tdb,"wgEncode") != NULL)
{
dyStringPrintf(dyTable,"%s: | ",mdbVar->var);
dyStringAppend(dyTable,htmlStringForDownloadsLink(db, tdb, mdbVar->val, TRUE, trackHash));
dyStringAppend(dyTable," |
");
}
else
{
// If antibody and metadata contains input={sameValue} then just print input
if(sameString(mdbVar->var,"antibody") && mdbObjContains(mdbObj,"input",mdbVar->val))
continue;
-#ifndef DONT_USE_CV_WHITELIST
- if (cvFile && whiteList)
+ if (cvTermTypes && differentString(mdbVar->var,"tableName")) // Don't bother with tableName
{
- for(oneTerm=whiteList;oneTerm!=NULL;oneTerm=oneTerm->next)
+ struct hash *cvTerm = hashFindVal(cvTermTypes,mdbVar->var);
+ if (cvTerm != NULL)
{
- if (sameWord(oneTerm->name,mdbVar->var))
- break;
- }
- if (oneTerm != NULL)
+ if(SETTING_NOT_ON(hashFindVal(cvTerm,"hidden"))) // NULL is not on
+ {
+ char *label=hashFindVal(cvTerm,"label");
+ if (label == NULL)
+ label = mdbVar->var;
+ char *linkOfType = controlledVocabLink(NULL,"type",mdbVar->var,label,label,NULL);
+ char *cvDefined=hashFindVal(cvTerm,"cvDefined");
+ if (cvDefined != NULL && differentWord(cvDefined,"no") && differentWord(cvDefined,"0"))
{
- //build link then
- // TODO: If hgEncodeVocab was changed to give a description of a term not found in cv.ra, then "type" could almost always be linked
- char *linkOfType = controlledVocabLink(cvFile,"type",oneTerm->name,oneTerm->val,oneTerm->val,NULL);
- char *linkOfTerm = controlledVocabLink(cvFile,"term",mdbVar->val,mdbVar->val,mdbVar->val,NULL);
+ char *linkOfTerm = controlledVocabLink(NULL,"term",mdbVar->val,mdbVar->val,mdbVar->val,NULL);
dyStringPrintf(dyTable,"%s: | %s |
",linkOfType,linkOfTerm);
- freeMem(linkOfType);
freeMem(linkOfTerm);
+ }
+ else
+ dyStringPrintf(dyTable,"%s: | %s |
",linkOfType,mdbVar->val);
+ //{ // NOTE: Could just have a tool tip for these.
+ //char *descr=cgiEncode(hashMustFindVal(cvTerm,"description"));
+ //label = cgiEncode(label);
+ //dyStringPrintf(dyTable,"%s: | %s |
",descr,label,mdbVar->val);
+ //freeMem(descr);
+ //freeMem(label);
+ //}
+ freeMem(linkOfType);
continue;
}
}
-#endif///ndef DONT_USE_CV_WHITELIST
+ }
dyStringPrintf(dyTable,"%s: | %s |
",mdbVar->var,mdbVar->val);
}
}
dyStringAppend(dyTable,"
");
//mdbObjsFree(&mdbObj); // spill some memory
return dyStringCannibalize(&dyTable);
}
boolean compositeMetadataToggle(char *db,struct trackDb *tdb,char *title,
boolean embeddedInText,boolean showLongLabel, struct hash *trackHash)
/* If metadata from metaTbl exists, create a link that will allow toggling it's display */
{
const struct mdbObj *safeObj = metadataForTable(db,tdb,NULL);
if(safeObj == NULL || safeObj->vars == NULL)
return FALSE;