9b0d9b4ac32562cf2ed51ffafaef6abe8bb2beb6
braney
Tue Feb 6 08:10:16 2018 -0800
add a function to get trackDb metadata as an slPair list. Change other
functions to use this api
diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index 035c6fc..fec6b3a 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -34,32 +34,30 @@
#include "regexHelper.h"
#include "snakeUi.h"
#include "vcfUi.h"
#include "vcf.h"
#include "errCatch.h"
#include "samAlignment.h"
#include "makeItemsItem.h"
#include "bedDetail.h"
#include "pgSnp.h"
#include "memgfx.h"
#include "trackHub.h"
#include "gtexUi.h"
#include "genbank.h"
#include "htmlPage.h"
#include "longRange.h"
-#include "tagRepo.h"
-#include "fieldedTable.h"
#include "barChartUi.h"
#include "customComposite.h"
#include "trackVersion.h"
#include "hubConnect.h"
#define SMALLBUF 256
#define MAX_SUBGROUP 9
#define ADD_BUTTON_LABEL "add"
#define CLEAR_BUTTON_LABEL "clear"
#define JBUFSIZE 2048
#define DEF_BUTTON "
\n"
#define DEF_BUTTON_JS "setCheckBoxesThatContain('%s',true,false,'%s','','%s');" \
"setCheckBoxesThatContain('%s',false,false,'%s','_defOff','%s');"
@@ -187,121 +185,61 @@
{
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(encTerm);
freeMem(encValue);
return dyStringCannibalize(&dyLink);
}
-char *tabSepMetaAsHtmlTable(char *tabSepMeta, struct trackDb *tdb,boolean showLongLabel,boolean showShortLabel)
-/* Return a string which is an HTML table of the tags for this track which are stored as a fielded table. */
-{
-// If there's no file, there's no data.
-if (tabSepMeta == NULL)
- return "";
-
-// If the trackDb entry doesn't have a foreign key, there's no data.
-char *metaTag = trackDbSetting(tdb, "meta");
-if (metaTag == NULL)
- return "";
-
-static char *cachedTableName = NULL;
-static struct hash *cachedHash = NULL;
-static struct fieldedTable *cachedTable = NULL;
-
-// Cache this table because there's a good chance we'll get called again with it.
-if ((cachedTableName == NULL) || differentString(tabSepMeta, cachedTableName))
- {
- char *requiredFields[] = {"meta"};
- cachedTable = fieldedTableFromTabFile(tabSepMeta, NULL, requiredFields, sizeof requiredFields / sizeof (char *));
- cachedHash = fieldedTableUniqueIndex(cachedTable, requiredFields[0]);
- cachedTableName = cloneString(tabSepMeta);
- }
-
-// Look for this tag in the metadata.
-struct fieldedRow *fr = hashFindVal(cachedHash, metaTag);
-if (fr == NULL)
- return "";
-
-struct dyString *dyTable = dyStringCreate("
");
-if (showLongLabel)
- dyStringPrintf(dyTable,"%s |
",tdb->longLabel);
-if (showShortLabel)
- dyStringPrintf(dyTable,"shortLabel: | "
- "%s |
",tdb->shortLabel);
-
-int ii;
-for(ii=0; ii < cachedTable->fieldCount; ii++)
- {
- char *fieldName = cachedTable->fields[ii];
- char *fieldVal = fr->row[ii];
- if (!sameString(fieldName, "meta") && !isEmpty(fieldVal))
- dyStringPrintf(dyTable,"%s: | "
- "%s |
",fieldName, fieldVal);
- }
-dyStringAppend(dyTable,"
");
-return dyStringCannibalize(&dyTable);
-}
-
-char *tagStormAsHtmlTable(char *tagStormFile, struct trackDb *tdb,boolean showLongLabel,boolean showShortLabel)
+char *pairsAsHtmlTable( struct slPair *pairs, struct trackDb *tdb, boolean showLongLabel,boolean showShortLabel)
/* Return a string which is an HTML table of the tags for this track. */
{
-char *metaTag = trackDbSetting(tdb, "meta");
-if (metaTag == NULL)
- return "";
-struct slPair *pairs = tagRepoPairs(tagStormFile, "meta", metaTag);
-
if (pairs == NULL)
return "";
struct dyString *dyTable = dyStringCreate("");
if (showLongLabel)
dyStringPrintf(dyTable,"%s |
",tdb->longLabel);
if (showShortLabel)
dyStringPrintf(dyTable,"shortLabel: | "
"%s |
",tdb->shortLabel);
for(; pairs; pairs = pairs->next)
{
if (!sameString(pairs->name, "meta") && !isEmpty((char *)pairs->val))
dyStringPrintf(dyTable,"%s: | "
"%s |
",pairs->name, (char *)pairs->val);
}
dyStringAppend(dyTable,"
");
return dyStringCannibalize(&dyTable);
}
char *metadataAsHtmlTable(char *db,struct trackDb *tdb,boolean showLongLabel,boolean showShortLabel)
// If metadata from metaDb exists, return string of html with table definition
{
-char *tabSepMeta = trackDbSetting(tdb, "metaTab");
-
-if (tabSepMeta)
- return tabSepMetaAsHtmlTable(tabSepMeta, tdb, showLongLabel, showShortLabel);
-
-char *tagStormFile = trackDbSetting(tdb, "metaDb");
+struct slPair *pairs = NULL;
-if (tagStormFile)
- return tagStormAsHtmlTable(tagStormFile, tdb, showLongLabel, showShortLabel);
+if ((pairs = trackDbMetaPairs(tdb)) != NULL)
+ return pairsAsHtmlTable(pairs, tdb, showLongLabel, showShortLabel);
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);
// Get the hash of mdb and cv term types
struct hash *cvTermTypes = (struct hash *)cvTermTypeHash();
@@ -386,35 +324,34 @@
char id[256];
safef(id, sizeof id, "div_%s_link", tdb->track);
printf("%s%s
",
(embeddedInText?" ":""),id,tdb->track, (title?title:""));
jsOnEventByIdF("click", id, "return metadataShowHide(\"%s\",%s,true);",
tdb->track, showLongLabel?"true":"false");
printf("
%s
",tdb->track, metadataAsHtmlTable(db,tdb,showLongLabel,FALSE));
return TRUE;
}
void extraUiLinks(char *db,struct trackDb *tdb)
// Show metadata, and downloads, schema links where appropriate
{
-char *tagStormFile = trackDbSetting(tdb, "metaDb");
-char *tabSepFile = trackDbSetting(tdb, "metaTab");
-boolean hasMetadata = (tagStormFile != NULL) || (tabSepFile != NULL) || (!tdbIsComposite(tdb) && !trackHubDatabase(db)
- && metadataForTable(db, tdb, NULL) != NULL);
-if (hasMetadata)
+struct slPair *pairs = trackDbMetaPairs(tdb);
+if (pairs != NULL)
+ printf("Metadata:
%s\n", pairsAsHtmlTable( pairs, tdb, FALSE, FALSE));
+else if (!tdbIsComposite(tdb) && !trackHubDatabase(db))
printf("Metadata:
%s\n", metadataAsHtmlTable(db, tdb, FALSE, FALSE));
boolean schemaLink = trackDataAccessible(db, tdb);
boolean downloadLink = (trackDbSetting(tdb, "wgEncode") != NULL && !tdbIsSuperTrack(tdb));
int links = 0;
if (schemaLink)
links++;
if (downloadLink)
links++;
if (links > 0)
cgiDown(0.7);
if (links > 1)
printf("