37a331259beee4fa8ebe7aa7f4d5b9d765a14c7f
kent
Thu Jan 6 15:45:34 2011 -0800
Starting to make hgHubConnect talk with hgTracks and hgTrackUi. Right now the tracks appear on the track list, but are not displaying properly.
diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c
index 25edbb0..5ef46ef 100644
--- src/hg/lib/trackHub.c
+++ src/hg/lib/trackHub.c
@@ -95,44 +95,46 @@
char *trackHubSetting(struct trackHub *hub, char *name)
/* Return setting if it exists, otherwise NULL. */
{
return hashFindVal(hub->settings, name);
}
char *trackHubRequiredSetting(struct trackHub *hub, char *name)
/* Return named setting. Abort with error message if not found. */
{
char *val = trackHubSetting(hub, name);
if (val == NULL)
errAbort("Missing required setting %s from %s", name, hub->url);
return val;
}
-struct trackHub *trackHubOpen(char *url)
-/* Open up a track hub from url. Reads and parses hub.ra and the genomesFile. */
+struct trackHub *trackHubOpen(char *url, char *hubName)
+/* Open up a track hub from url. Reads and parses hub.ra and the genomesFile.
+ * The hubName is generally just the asciified ID number. */
{
struct lineFile *lf = udcWrapShortLineFile(url, NULL, 256*1024);
struct hash *hubRa = raNextRecord(lf);
if (hubRa == NULL)
errAbort("empty %s in trackHubOpen", url);
if (raNextRecord(lf) != NULL)
errAbort("multiple records in %s", url);
/* Allocate hub and fill in settings field and url. */
struct trackHub *hub;
AllocVar(hub);
hub->url = cloneString(url);
+hub->name = cloneString(hubName);
hub->settings = hubRa;
/* Fill in required fields from settings. */
hub->shortLabel = trackHubRequiredSetting(hub, "shortLabel");
hub->longLabel = trackHubRequiredSetting(hub, "longLabel");
hub->genomesFile = trackHubRequiredSetting(hub, "genomesFile");
lineFileClose(&lf);
char *genomesUrl = trackHubRelativeUrl(hub->url, hub->genomesFile);
hub->genomeHash = hashNew(8);
hub->genomeList = trackHubGenomeReadRa(genomesUrl, hub->genomeHash);
freez(&genomesUrl);
return hub;
@@ -281,30 +283,43 @@
if (parent == NULL)
errAbort("Parent %s of track %s doesn't exist in hub %s genome %s", parentName,
tdb->track, hub->url, genome->name);
tdb->parent = parent;
parent->subtracks = tdb;
}
}
hashFree(&hash);
/* Loop through list checking tags and removing ad-hoc use of parent and subtracks tags. */
for (tdb = tdbList; tdb != NULL; tdb = tdb->next)
{
checkTagsLegal(hub, genome, tdb);
tdb->parent = tdb->subtracks = NULL;
}
+
+trackDbAddTableField(tdbList);
+trackHubAddNamePrefix(hub->name, tdbList);
+trackHubAddGroupName(hub->name, tdbList);
+for (tdb = tdbList; tdb != NULL; tdb = tdb->next)
+ {
+ trackDbFieldsFromSettings(tdb);
+ trackDbPolish(tdb);
+ }
+uglyf("polished tracks
\n");
+
+uglyf("added hub_%s_ prefix to track list
\n", hub->name);
+
return tdbList;
}
static void reprefixString(char **pString, char *prefix)
/* Replace *pString with prefix + *pString, freeing
* whatever was in *pString before. */
{
char *oldName = *pString;
*pString = catTwoStrings(prefix, oldName);
freeMem(oldName);
}
static void addPrefixToSetting(struct hash *settings, char *key, char *prefix)
/* Given a settings hash, which is string valued. Old values will be freed. */
{