faf767571f701aec7738d97554b4cea24a1aa804
max
  Fri Mar 27 05:57:53 2015 +0100
Revert "Removing GSAID code. BrianR said that's OK."

This reverts commit 324e56bb2fe619534c60a35706fb7bfc188c737f.

diff --git src/hg/hgTracks/pslTrack.c src/hg/hgTracks/pslTrack.c
index e94c7f6..732de51 100644
--- src/hg/hgTracks/pslTrack.c
+++ src/hg/hgTracks/pslTrack.c
@@ -284,30 +284,145 @@
 lf->end = lf->tallEnd = psl->tEnd;
 
 /* Hang on to psl for use in drawing phase (this is why caller must not free psl!): */
 lf->original = psl;
 
 return lf;
 }
 
 struct linkedFeatures *lfFromPsl(struct psl *psl, boolean isXeno)
 /* Create a linked feature item from psl.
  * Don't free psl afterwards! */
 {
 return lfFromPslx(psl, 1, isXeno, FALSE, NULL);
 }
 
+#ifndef GBROWSE
+boolean  gsidSelectedSubjListLoaded = FALSE;
+
+void initializeGsidSubjList()
+{
+struct gsidSubj *subj;
+struct lineFile *lf;
+
+char *line;
+int lineSize;
+
+char *subjListFileName;
+
+if (hIsGisaidServer())
+    {
+    subjListFileName = cartOptionalString(cart, gisaidSubjList);
+    }
+else
+    {
+    subjListFileName = cartOptionalString(cart, gsidSubjList);
+    }
+if (subjListFileName)
+    {
+    lf = lineFileOpen(subjListFileName, TRUE);
+
+    while (lineFileNext(lf, &line, &lineSize))
+    	{
+    	AllocVar(subj);
+    	subj->subjId = cloneString(line);
+    	slAddHead(&gsidSelectedSubjList, subj);
+    	}
+    slReverse(&gsidSelectedSubjList);
+    lineFileClose(&lf);
+    gsidSelectedSubjListLoaded = TRUE;
+    }
+}
+
+/* special processing for GSID entries */
+/* check if the entry belongs to a subject that is selected */
+boolean isSelected(char *seqId)
+{
+char query[256];
+struct sqlResult *sr;
+char **row;
+char *subjId, *testSubjId;
+struct sqlConnection *conn;
+struct gsidSubj *subj;
+
+if (!gsidSelectedSubjListLoaded) initializeGsidSubjList();
+
+conn= hAllocConn(database);
+
+if (hIsGsidServer())
+    {
+    sqlSafef(query, sizeof query, "select subjId from gsIdXref where dnaSeqId='%s'", seqId);
+    }
+else
+    {
+    sqlSafef(query, sizeof query, "select subjId from gisaidXref where dnaSeqId='%s'", seqId);
+    }
+sr = sqlMustGetResult(conn, query);
+row = sqlNextRow(sr);
+if (row != NULL)
+    {
+    subjId = row[0];
+
+    /* scan thru subj ID list */
+    subj = gsidSelectedSubjList;
+    while (subj != NULL)
+    	{
+    	testSubjId = subj->subjId;
+	if (sameWord(subjId, testSubjId))
+	    {
+	    sqlFreeResult(&sr);
+	    hFreeConn(&conn);
+	    return(TRUE);
+	    }
+    	subj = subj->next;
+    	}
+    }
+sqlFreeResult(&sr);
+hFreeConn(&conn);
+return(FALSE);
+}
+
+boolean gsidCheckSelected(struct track *tg)
+{
+char *setting;
+char *subjListFileName;
+
+/* check subject only if the selectSubject is set to on in trackDb for this track */
+setting = trackDbSetting(tg->tdb, SELECT_SUBJ);
+if (isNotEmpty(setting))
+    {
+    if (sameString(setting, "on"))
+	{
+	/* return TRUE only if the user has selected the subjects */
+	if (hIsGisaidServer())
+	    {
+	    subjListFileName = strdup(gisaidSubjList);
+	    }
+	else
+	    {
+	    subjListFileName = gsidSubjList;
+	    }
+	if (cartOptionalString(cart, subjListFileName))
+	    {
+	    return(TRUE);
+	    }
+	}
+    }
+return(FALSE);
+}
+#endif /* GBROWSE */
+
 static void connectedLfFromPslsInRange(struct sqlConnection *conn,
     struct track *tg, int start, int end, char *chromName,
     boolean isXeno, boolean nameGetsPos, int sizeMul)
 /* Return linked features from range of table after have
  * already connected to database.. */
 {
 struct sqlResult *sr = NULL;
 char **row;
 int rowOffset;
 char *optionChrStr;
 struct linkedFeatures *lfList = NULL, *lf;
 char optionChr[128]; /* Option -  chromosome filter */
 char extraWhere[128];
 
 safef( optionChr, sizeof(optionChr), "%s.chromFilter", tg->track);