ce5fb4ee78a01179f2f53114b6eb52ca77811eb6
kate
Wed Jan 23 10:08:41 2013 -0800
1. hgFileUi now only prints data restriction warning if the composite has a restricted object. 2. Add -cv option to mdbPrint to allow alternate CV file. 2. 3. A step toward modularizing restriction timestamp handling. #10006 Mute File UI loud warnings when they are not applicable.
diff --git src/hg/lib/fileUi.c src/hg/lib/fileUi.c
index 5ac7cee..d38fa24 100644
--- src/hg/lib/fileUi.c
+++ src/hg/lib/fileUi.c
@@ -579,46 +579,47 @@
#define FILTERBY_HELP_LINK "help"
cgiDown(0.9);
printf("Filter files by: (select multiple %sitems - %s)\n"
"
\n",
(count >= 1 ? "categories and ":""),FILTERBY_HELP_LINK);
printf("%s\n",dyStringContents(dyFilters));
printf("
\n");
jsIncludeFile("ddcl.js",NULL);
}
dyStringFree(&dyFilters);
}
return filterableBits;
}
-static void filesDownloadsPreamble(char *db, struct trackDb *tdb)
+static void filesDownloadsPreamble(char *db, struct trackDb *tdb, boolean isUnrestricted)
// Replacement for preamble.html which should expose parent dir, files.txt and supplemental, but
// not have any specialized notes per composite. Specialized notes belong in track description.
{
char *server = hDownloadsServer();
char *subDir = "";
if (hIsBetaHost())
{
server = "hgdownload-test.cse.ucsc.edu"; // NOTE: Force this case because beta may think
subDir = "/beta"; // it's downloads server is "hgdownload.cse.ucsc.edu"
}
-
+if (!isUnrestricted)
+ {
cgiDown(0.9);
puts("Data is RESTRICTED FROM USE");
puts("in publication until the restriction date noted for the given data file.");
-
+}
cgiDown(0.7);
puts("Additional resources:");
printf("
files.txt - lists the name and metadata for each download.\n",
server,db,ENCODE_DCC_DOWNLOADS, tdb->track, subDir);
printf("
md5sum.txt - lists the md5sum output for each download.\n",
server,db,ENCODE_DCC_DOWNLOADS, tdb->track, subDir);
printf("
downloads server - "
"alternative access to downloadable files (may include obsolete data).\n",
server,db,ENCODE_DCC_DOWNLOADS, tdb->track, subDir);
struct fileDb *oneFile = fileDbGet(db, ENCODE_DCC_DOWNLOADS, tdb->track, "supplemental");
if (oneFile != NULL)
{
@@ -770,31 +771,31 @@
// This may not be needed because the filterBy code
// already eliminated these.
safecpy(buf,sizeof buf,field);
cleanClass = buf;
eraseNonAlphaNum(cleanClass);
}
}
safef(class,sizeof class," class='%s %s'",sortOrder->column[ix],cleanClass);
}
char *align = (sameString("labVersion",sortOrder->column[ix])
|| sameString("softwareVersion",sortOrder->column[ix]) ?
" align='left'":" align='center'");
if (sameString("dateUnrestricted",sortOrder->column[ix])
&& field
- && dateIsOld(field,"%F"))
+ && dateIsOld(field, MDB_ENCODE_DATE_FORMAT))
printf("%s | ",align,class,field);
else
{
// use label
if (!isFieldEmpty && termHash)
{
char *label = hashFindVal(termHash,CV_LABEL);
if (label != NULL)
field = label;
}
printf("%s | ",align,class,isFieldEmpty?" ":field);
}
if (!sameString("fileType",sortOrder->column[ix]))
mdbObjRemoveOneVar(oneFile->mdb,sortOrder->column[ix],NULL);
}
@@ -839,57 +840,64 @@
printf("\n");
printf("\n");
if (parentTdb == NULL)
printf("\n");
if (timeIt)
uglyTime("Finished table");
return filesCount;
}
static int filesFindInDir(char *db, struct mdbObj **pmdbFiles, struct fileDb **pFileList,
- char *fileType, int limit,boolean *exceededLimit)
+ char *fileType, int limit, boolean *exceededLimit, boolean *isUnrestricted)
// Prints list of files in downloads directories matching mdb search terms. Returns count
{
int fileCount = 0;
+if (isUnrestricted != NULL)
+ *isUnrestricted = TRUE;
+
// Verify file existance and make fileList of those found
struct fileDb *fileList = NULL, *oneFile = NULL; // Will contain found files
struct mdbObj *mdbFiles = NULL; // Will caontain a list of mdbs for the found files
struct mdbObj *mdbList = *pmdbFiles;
while (mdbList && (limit == 0 || fileCount < limit))
{
boolean found = FALSE;
struct mdbObj *mdbFile = slPopHead(&mdbList);
char *composite = mdbObjFindValue(mdbFile,MDB_VAR_COMPOSITE);
if (composite == NULL)
{
mdbObjsFree(&mdbFile);
continue;
}
// First for FileName
char *fileName = mdbObjFindValue(mdbFile,MDB_VAR_FILENAME);
if (fileName == NULL)
{
mdbObjsFree(&mdbFile);
continue;
}
+ // Are any files still restricted access under ENCODE data policy ?
+ if (isUnrestricted != NULL && *isUnrestricted)
+ *isUnrestricted = mdbObjEncodeIsUnrestricted(mdbFile);
+
struct slName *fileSet = slNameListFromComma(fileName);
struct slName *md5Set = NULL;
char *md5sums = mdbObjFindValue(mdbFile,MDB_VAR_MD5SUM);
if (md5sums != NULL)
md5Set = slNameListFromComma(md5sums);
// Could be that "bai" is implicit with "bam"
if ((slCount(fileSet) == 1) && endsWith(fileSet->name,".bam"))
{
char buf[512];
safef(buf,sizeof(buf),"%s.bai",fileSet->name);
slNameAddTail(&fileSet, buf);
}
while (fileSet != NULL)
{
@@ -1023,52 +1031,53 @@
if (mdbList)
(void)mdbObjsFilter(&mdbList,"objStatus","re*",TRUE); // revoked, replaced, renamed
if (slCount(mdbList) == 0)
{
warn("No files specified in metadata for: %s\n%s",tdb->track,tdb->longLabel);
return;
}
if (timeIt)
uglyTime("Found %d mdb objects",slCount(mdbList));
// Verify file existance and make fileList of those found
struct fileDb *fileList = NULL; // Will contain found files
-int fileCount = filesFindInDir(db, &mdbList, &fileList, NULL, 0, NULL);
+boolean isUnrestricted;
+int fileCount = filesFindInDir(db, &mdbList, &fileList, NULL, 0, NULL, &isUnrestricted);
if (timeIt)
uglyTime("Found %d files in dir",fileCount);
assert(fileCount == slCount(fileList));
if (fileCount == 0)
{
warn("No downloadable files currently available for: %s\n%s",tdb->track,tdb->longLabel);
return; // No files so nothing to do.
}
if (debug)
{
warn("The following files are in goldenPath/%s/%s/%s/ but NOT in the mdb:",
db,ENCODE_DCC_DOWNLOADS, tdb->track);
fileDbGet(db, ENCODE_DCC_DOWNLOADS, tdb->track, "listAll");
}
jsIncludeFile("hui.js",NULL);
jsIncludeFile("ajax.js",NULL);
// standard preamble
-filesDownloadsPreamble(db,tdb);
+filesDownloadsPreamble(db,tdb, isUnrestricted);
// remove these now to get them out of the way
mdbObjRemoveVars(mdbList,MDB_VAR_FILENAME " " MDB_VAR_FILEINDEX " "
MDB_VAR_COMPOSITE " " MDB_VAR_PROJECT);
if (timeIt)
uglyTime("
Removed 4 unwanted vars");
// Now update all files with their sortable fields and sort the list
mdbObjReorderByCv(mdbList,FALSE);// Start with cv defined order for visible vars.
// NOTE: will not need to reorder during print!
sortOrder_t *sortOrder = fileSortOrderGet(cart,tdb,mdbList);
int filterable = 0;
if (sortOrder != NULL)
{
int removed = removeCommonMdbVarsNotInSortOrder(mdbList,sortOrder);
@@ -1117,31 +1126,32 @@
if (slCount(mdbList) == 0)
{
printf("
No files found.
\n");
return 0;
}
if (timeIt)
uglyTime("Found %d mdb objects",slCount(mdbList));
// Now sort mdbObjs so that composites will stay together & lookup of files will be most efficient
mdbObjsSortOnVars(&mdbList, MDB_VAR_COMPOSITE);
#define FOUND_FILE_LIMIT 1000
struct fileDb *fileList = NULL; // Will contain found files
int filesExpected = slCount(mdbList);
boolean exceededLimit = FALSE;
-int fileCount = filesFindInDir(db, &mdbList, &fileList, fileType, FOUND_FILE_LIMIT, &exceededLimit);
+int fileCount = filesFindInDir(db, &mdbList, &fileList, fileType, FOUND_FILE_LIMIT,
+ &exceededLimit, NULL);
if (timeIt)
uglyTime("Found %d files in dir",fileCount);
assert(fileCount == slCount(fileList));
if (fileCount == 0)
{
printf("
No files found.
\n");
return 0; // No files so nothing to do.
}
// remove these now to get them out of the way
mdbObjRemoveVars(mdbList,MDB_VAR_FILENAME " " MDB_VAR_FILEINDEX " "
MDB_VAR_PROJECT " " MDB_VAR_TABLENAME);
if (timeIt)
uglyTime("Removed 4 unwanted vars");