static AjBool resourceoutWriteDrcat(AjPFile outf, const AjPResource resource) { AjPReslink tmplink = NULL; AjPResquery tmpqry = NULL; AjPResterm resterm = NULL; AjPStr tmpstr = NULL; AjIList iter = NULL; if(!outf) return ajFalse; ajFmtPrintF(outf, "%-8s%S\n", "ID", resource->Id); iter = ajListIterNew(resource->Idalt); while((tmpstr = ajListstrIterGet(iter))) ajFmtPrintF(outf, "%-8s%S\n", "IDalt", tmpstr); ajListIterDel(&iter); if(ajStrGetLen(resource->Acc)) ajFmtPrintF(outf, "%-8s%S\n", "Acc", resource->Acc); ajFmtPrintF(outf, "%-8s%S\n", "Name", resource->Name); ajFmtPrintF(outf, "%-8s%S\n", "Desc", resource->Desc); if(ajStrGetLen(resource->Url)) ajFmtPrintF(outf, "%-8s%S\n", "URL", resource->Url); if(ajStrGetLen(resource->Urllink)) ajFmtPrintF(outf, "%-8s%S\n", "URLlink", resource->Urllink); if(ajStrGetLen(resource->Urlrest)) ajFmtPrintF(outf, "%-8s%S\n", "URLrest", resource->Urlrest); if(ajStrGetLen(resource->Urlsoap)) ajFmtPrintF(outf, "%-8s%S\n", "URLsoap", resource->Urlsoap); iter = ajListIterNew(resource->Cat); while((tmpstr = ajListstrIterGet(iter))) ajFmtPrintF(outf, "%-8s%S\n", "Cat", tmpstr); ajListIterDel(&iter); iter = ajListIterNew(resource->Taxon); while((resterm = ajListIterGet(iter))) ajFmtPrintF(outf, "%-8s%S | %S\n", "Taxon", resterm->Id, resterm->Name); ajListIterDel(&iter); iter = ajListIterNew(resource->Edamtpc); while((resterm = ajListIterGet(iter))) ajFmtPrintF(outf, "%-8s%S | %S\n", "EDAMtpc", resterm->Id, resterm->Name); ajListIterDel(&iter); iter = ajListIterNew(resource->Edamdat); while((resterm = ajListIterGet(iter))) ajFmtPrintF(outf, "%-8s%S | %S\n", "EDAMdat", resterm->Id, resterm->Name); ajListIterDel(&iter); iter = ajListIterNew(resource->Edamid); while((resterm = ajListIterGet(iter))) ajFmtPrintF(outf, "%-8s%S | %S\n", "EDAMid", resterm->Id, resterm->Name); ajListIterDel(&iter); iter = ajListIterNew(resource->Edamfmt); while((resterm = ajListIterGet(iter))) ajFmtPrintF(outf, "%-8s%S | %S\n", "EDAMfmt", resterm->Id, resterm->Name); ajListIterDel(&iter); iter = ajListIterNew(resource->Xref); while((tmplink = ajListIterGet(iter))) ajFmtPrintF(outf, "%-8s%S | %S\n", "Xref", tmplink->Source, tmplink->Term); ajListIterDel(&iter); iter = ajListIterNew(resource->Query); while((tmpqry = ajListIterGet(iter))) ajFmtPrintF(outf, "%-8s %S | %S | %S | %S\n", "Query", tmpqry->Datatype, tmpqry->Format, tmpqry->Term, tmpqry->Url); ajListIterDel(&iter); iter = ajListIterNew(resource->Example); while((tmpstr = ajListstrIterGet(iter))) ajFmtPrintF(outf, "%-8s%S\n", "Example", tmpstr); ajListIterDel(&iter); ajFmtPrintF(outf, "\n"); return ajTrue; }
static AjBool resourceoutWriteWebpage(AjPFile outf, const AjPResource resource) { AjPResquery tmpqry = NULL; AjPResterm resterm = NULL; AjPStr snstr = NULL; AjPStr tmpstr = NULL; AjPStr tmpurl = NULL; AjPStr tmpid = NULL; AjPStr tmpname = NULL; AjPStr tmpqid = NULL; AjPStr tmpqname = NULL; AjPStr tmpqterm = NULL; AjIList iter = NULL; AjIList iterq = NULL; ajuint i = 0; AjPStrTok handle = NULL; AjPStrTok namehandle = NULL; AjPStrTok termhandle = NULL; const char* biourl = "http://bioportal.bioontology.org/ontologies/45846"; if(!outf) return ajFalse; ajFmtPrintF(outf, "<!DOCTYPE HTML PUBLIC " "\"-//W3C//DTD HTML 4.01 Transitional//EN\">\n"); ajFmtPrintF(outf, "<html>\n"); ajFmtPrintF(outf, "<head>\n"); ajFmtPrintF(outf, "<meta http-equiv=\"Content-Type\" " "content=\"text/html;charset=UTF-8\" />\n"); ajFmtPrintF(outf, "<title>Bioinformatics Data Resource Catalogue</title>\n"); ajFmtPrintF(outf, "</head>\n\n\n"); ajFmtPrintF(outf, "<body bgcolor=\"#ffffff\">\n"); ajFmtPrintF(outf, "<!-- ID -->\n"); if(ajStrGetLen(resource->Url)) ajFmtPrintF(outf, "<center><h1><a href=\"%S\">%S</a></h1></center>\n", resource->Url, resource->Id); else ajFmtPrintF(outf, "<center><h1>%S</h1></center>\n", resource->Id); ajFmtPrintF(outf, "<!-- Name -->\n"); ajFmtPrintF(outf, "<center><h2>%S</h2> </center>\n", resource->Name); ajFmtPrintF(outf, "<!-- Desc -->\n"); ajFmtPrintF(outf, "<p><i>%S</i></p>\n", resource->Desc); ajFmtPrintF(outf, "<table>\n"); ajFmtPrintF(outf, "<!-- ID -->\n"); ajFmtPrintF(outf, " <tr align=\"left\"><th>ID</th><td>%S</td></tr>\n", resource->Id); ajFmtPrintF(outf, "<!-- IDalt or omit -->\n"); if(ajListGetLength(resource->Idalt)) { ajFmtPrintF(outf, " <tr align=\"left\"><th>IDalt</th><td>"); i = 0; iter = ajListIterNew(resource->Idalt); while((tmpstr = ajListstrIterGet(iter))) { if(i++) ajFmtPrintF(outf, ", "); ajFmtPrintF(outf, "%S", tmpstr); } ajListIterDel(&iter); ajFmtPrintF(outf, "</td></tr>\n"); } if(ajStrGetLen(resource->Acc)) { ajFmtPrintF(outf, "<!-- ACC or omit -->\n"); ajFmtPrintF(outf, " <tr align=\"left\"><th>Acc</th><td>%S</td></tr>\n", resource->Acc); } if(ajStrGetLen(resource->Url)) ajFmtPrintF(outf, " <tr align=\"left\"><th>Home</th><td>" "<a href=\"%S\">%S</a></td></tr>\n", resource->Url, resource->Url); if(ajListGetLength(resource->Edamtpc)) { ajFmtPrintF(outf, "<!-- EDAMtpc -->\n"); iter = ajListIterNew(resource->Edamtpc); while((resterm = ajListIterGet(iter))) { ajStrAssignS(&tmpid, resterm->Id); ajStrCutBraces(&tmpid); ajStrFmtPercentEncodeC(&tmpid, " /()"); ajFmtPrintF(outf, " <tr align=\"left\"><th>EDAM topic</th><td>" "<a href=\"%s?p=terms&conceptid=EDAM%%3A%S\">%S</a>" "</td></tr>\n", biourl, tmpid, resterm->Name); } ajListIterDel(&iter); } ajFmtPrintF(outf, "<!-- Cat or omit -->\n"); if(ajListGetLength(resource->Cat)) { iter = ajListIterNew(resource->Cat); while((tmpstr = ajListstrIterGet(iter))) ajFmtPrintF(outf, " <tr align=\"left\"><th>Category</th>" "<td>%S</td></tr>\n", tmpstr); ajListIterDel(&iter); } ajFmtPrintF(outf, "<!-- Taxon (comma-separated list) -->\n"); ajFmtPrintF(outf, " <tr align=\"left\"><th>Taxon</th><td>"); i = 0; iter = ajListIterNew(resource->Taxon); while((resterm = ajListIterGet(iter))) { if(i++) ajFmtPrintF(outf, ", "); ajFmtPrintF(outf, "<a href=\"http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/" "wwwtax.cgi?id=%S\">%S</a>", resterm->Id, resterm->Name); } ajListIterDel(&iter); ajFmtPrintF(outf, "</td></tr>\n"); ajFmtPrintF(outf, "<!-- URLlink or omit -->\n"); if(ajStrGetLen(resource->Urllink)) ajFmtPrintF(outf, "<tr align=\"left\"><th>Linking</th><td>" "<a href=\"%S\">%S</a></td></tr>\n", resource->Urllink, resource->Urllink); ajFmtPrintF(outf, "<!-- URLrest or omit -->\n"); if(ajStrGetLen(resource->Urlrest)) ajFmtPrintF(outf, "<tr align=\"left\"><th>REST</th><td>" "<a href=\"%S\">%S</a></td></tr>\n", resource->Urlrest, resource->Urlrest); ajFmtPrintF(outf, "<!-- URLsoap or omit -->\n"); if(ajStrGetLen(resource->Urlsoap)) ajFmtPrintF(outf, "<tr align=\"left\"><th>SOAP</th><td>" "<a href=\"%S\">%S</a></td></tr>\n", resource->Urlsoap, resource->Urlsoap); ajFmtPrintF(outf, "<!-- Xref - omit ! -->\n"); ajFmtPrintF(outf, "</table>\n"); ajFmtPrintF(outf, "<!-- Query or omit, free-text comments given in {} --> \n"); if(ajListGetLength(resource->Query)) { ajFmtPrintF(outf, "<h3>Available data</h3>\n"); ajFmtPrintF(outf, "<table>\n"); ajFmtPrintF(outf, " <thead>\n"); ajFmtPrintF(outf, " <tr align=\"left\">\n"); ajFmtPrintF(outf, " <th>Data</th>\n"); ajFmtPrintF(outf, " <th>Format</th>\n"); ajFmtPrintF(outf, " <th>Query</th>\n"); ajFmtPrintF(outf, " <th>Link</th>\n"); ajFmtPrintF(outf, " </tr>\n"); ajFmtPrintF(outf, " </thead>\n"); ajFmtPrintF(outf, " <tbody>\n"); iter = ajListIterNew(resource->Query); while((tmpqry = ajListIterGet(iter))) { ajStrAssignS(&tmpname, tmpqry->Datatype); ajStrCutBraces(&tmpname); ajStrFmtPercentEncodeC(&tmpname, " /()"); ajFmtPrintF(outf, " <tr>\n"); ajFmtPrintF(outf, " <td>" "<a href=\"%s?" "p=terms&conceptid=EDAM%%3A%S\">%S</a></td>\n", biourl, tmpname, tmpqry->Datatype); ajStrAssignS(&tmpname, tmpqry->Format); ajStrCutBraces(&tmpname); ajStrFmtPercentEncodeC(&tmpname, " /()"); ajFmtPrintF(outf, " <td>" "<a href=\"%s?" "p=terms&conceptid=EDAM%%3A%S\">%S</a></td>\n", biourl, tmpname, tmpqry->Format); ajStrAssignS(&tmpname, tmpqry->Term); ajStrCutBraces(&tmpname); ajStrFmtPercentEncodeC(&tmpname, " /()"); ajFmtPrintF(outf, " <td>" "<a href=\"%s?" "p=terms&conceptid=EDAM%%3A%S\">%S</a></td>\n", biourl, tmpname, tmpqry->Term); ajFmtPrintF(outf, " <td>%S</td>\n", tmpqry->Url); ajFmtPrintF(outf, " </tr>\n\n"); } ajListIterDel(&iter); ajFmtPrintF(outf, " </tbody>\n"); ajFmtPrintF(outf, "</table>\n"); } ajFmtPrintF(outf, "<!-- Example or omit -->\n"); if(ajListGetLength(resource->Example)) { ajFmtPrintF(outf, "<h3>Example queries</h3>\n"); ajFmtPrintF(outf, "<table>\n"); ajFmtPrintF(outf, " <thead>\n"); ajFmtPrintF(outf, " <tr align=\"left\">\n"); ajFmtPrintF(outf, " <th>Data</th>\n"); ajFmtPrintF(outf, " <th>Format</th>\n"); ajFmtPrintF(outf, " <th>Query</th>\n"); ajFmtPrintF(outf, " <th>Example</th>\n"); ajFmtPrintF(outf, " </tr>\n"); ajFmtPrintF(outf, " </thead>\n"); ajFmtPrintF(outf, " <tbody>\n"); iter = ajListIterNew(resource->Example); while((tmpstr = ajListstrIterGet(iter))) { ajStrTokenAssignC(&handle, tmpstr, "|"); ajStrTokenNextParse(handle, &tmpid); ajStrRemoveWhiteExcess(&tmpid); ajStrTokenNextParse(handle, &tmpname); ajStrRemoveWhiteExcess(&tmpname); iterq = ajListIterNew(resource->Query); while((tmpqry = ajListIterGet(iterq))) { if(!ajStrMatchS(tmpid, tmpqry->Term)) continue; ajStrAssignS(&tmpqid, tmpqry->Datatype); ajStrCutBraces(&tmpqid); ajStrFmtPercentEncodeC(&tmpqid, " /()"); ajFmtPrintF(outf, " <tr>\n"); ajFmtPrintF(outf, " <td>" "<a href=\"%s?" "p=terms&conceptid=EDAM%%3A%S\">%S</a></td>\n", biourl, tmpqid, tmpqry->Datatype); /* datatype */ ajStrAssignS(&tmpqid, tmpqry->Format); ajStrCutBraces(&tmpqid); ajStrFmtPercentEncodeC(&tmpqid, " /()"); ajFmtPrintF(outf, " <td>" "<a href=\"%s?" "p=terms&conceptid=EDAM%%3A%S\">%S</a></td>\n", biourl, tmpqid, tmpqry->Format); /* format */ ajStrAssignS(&tmpurl, tmpqry->Url); ajStrAssignS(&tmpqid, tmpqry->Term); ajStrCutBraces(&tmpqid); ajStrFmtPercentEncodeC(&tmpqid, " /()"); i = 0; ajStrTokenAssignC(&handle, tmpid, ";"); ajStrTokenAssignC(&namehandle, tmpname, ";"); ajStrTokenAssignC(&termhandle, tmpqry->Term, ";"); ajFmtPrintF(outf, " <td>"); while(ajStrTokenNextParse(handle, &tmpqid)) { ajStrTokenNextParse(namehandle, &tmpqname); ajStrTokenNextParse(termhandle, &tmpqterm); if(i) ajFmtPrintF(outf, "; "); ajStrRemoveWhiteExcess(&tmpqid); ajStrCutBraces(&tmpqid); ajFmtPrintF(outf, "<a href=\"%s?" "p=terms&conceptid=EDAM%%3A%S\">%S</a>", biourl, tmpqid, tmpqterm); /* id term */ ajFmtPrintS(&snstr, "%%s%u", (i+1)); ajStrExchangeSS(&tmpurl, snstr, tmpqname); i++; } ajFmtPrintF(outf, "</td>\n"); ajFmtPrintS(&snstr, "%%s"); ajStrExchangeSS(&tmpurl, snstr, tmpname); ajFmtPrintF(outf, " <td><a href=\"%S\">%S</a></td>\n", tmpurl, tmpname); /* url, exampleid */ ajFmtPrintF(outf, " </tr>\n"); } ajListIterDel(&iterq); } ajListIterDel(&iter); ajFmtPrintF(outf, " </tbody>\n"); ajFmtPrintF(outf, "</table>\n"); } ajFmtPrintF(outf, "\n\n</body></html>\n"); ajStrDel(&tmpid); ajStrDel(&tmpname); ajStrDel(&tmpurl); ajStrDel(&tmpqid); ajStrDel(&tmpqname); ajStrDel(&tmpqterm); ajStrDel(&snstr); ajStrTokenDel(&handle); ajStrTokenDel(&namehandle); ajStrTokenDel(&termhandle); return ajTrue; }
int main(int argc, char** argv) { AjPFile outf = NULL; AjPFile cachef = NULL; AjIList iterator = NULL; AjPList aliases = NULL; AjPList dbas = NULL; AjPList species = NULL; AjPStr alias = NULL; AjPStr dbname = NULL; AjPStr spname = NULL; AjPStr svrname = NULL; AjPStr svrurl = NULL; AjPStr dbcurl = NULL; AjPTime svrtime = NULL; EnsEDatabaseadaptorGroup dbag = ensEDatabaseadaptorGroupNULL; EnsPDatabaseadaptor dba = NULL; EnsPDatabaseconnection dbc = NULL; embInit("cacheensembl", argc, argv); ensInit(); svrname = ajAcdGetString("servername"); outf = ajAcdGetOutfile("outfile"); cachef = ajAcdGetOutfile("cachefile"); dbcurl = ajStrNew(); svrurl = ajStrNew(); dbname = ajStrNew(); ajNamSvrGetUrl(svrname, &svrurl); if(!svrurl) ajFatal("Could not resolve server name '%S'.", svrname); dbc = ensDatabaseconnectionNewUrl(svrurl); ensRegistryLoadDatabaseconnection(dbc); ensDatabaseconnectionDel(&dbc); /* Write the server file header. */ svrtime = ajTimeNewTodayFmt("cachefile"); ajFmtPrintF(cachef, "# %S %D\n", ajFileGetNameS(cachef), svrtime); ajTimeDel(&svrtime); ajFmtPrintF(cachef, "# Automatically generated by cacheensembl " "for server '%S'.\n\n", svrname); /* ** Get all Ensembl Database Adaptor objects and write them as ** EMBOSS Database definitions. */ aliases = ajListstrNew(); dbas = ajListNew(); species = ajListstrNew(); ensRegistryRetrieveAllSpecies(species); while(ajListstrPop(species, &spname)) { ensRegistryGetAllDatabaseadaptors(ensEDatabaseadaptorGroupNULL, spname, dbas); while(ajListPop(dbas, (void**) &dba)) { dbag = ensDatabaseadaptorGetGroup(dba); if(dbag == ensEDatabaseadaptorGroupNULL) { ajDebug("cacheensembl main got unexpected " "Ensembl Database Adaptor Group %d.\n", dbag); continue; } ajStrAssignS(&dbname, ensDatabaseadaptorGetSpecies(dba)); if(dbag != ensEDatabaseadaptorGroupCore) { ajStrAppendC(&dbname, "_"); ajStrAppendC(&dbname, ensDatabaseadaptorGroupToChar(dbag)); } dbc = ensDatabaseadaptorGetDatabaseconnection(dba); ensDatabaseconnectionFetchUrl(dbc, &dbcurl); if(outf) ajFmtPrintF(outf, "%S\n", dbname); ajFmtPrintF(cachef, "DBNAME %S [\n", dbname); ajFmtPrintF(cachef, " release: \"%s\"\n", ensSoftwareGetVersion()); ajFmtPrintF(cachef, " server: \"%S\"\n", svrname); ajFmtPrintF(cachef, " url: \"%S\"\n", dbcurl); ajFmtPrintF(cachef, "]\n"); ajFmtPrintF(cachef, "\n"); if(dbag != ensEDatabaseadaptorGroupCore) continue; ensRegistryAliasFetchAllbySpecies( ensDatabaseadaptorGetSpecies(dba), aliases); /* ** Format all aliases to lower case, ** sort them alphabetically and remove duplicates. */ iterator = ajListIterNew(aliases); while(!ajListIterDone(iterator)) { alias = ajListstrIterGet(iterator); ajStrFmtLower(&alias); } ajListIterDel(&iterator); ajListSortUnique(aliases, cacheensembl_stringcompare, cacheensembl_stringdelete); alias = NULL; if(ajListGetLength(aliases) > 0) { while(ajListstrPop(aliases, &alias)) { /* ** Reject any aliases with other than alpha-numeric ** characters like white space. */ if(ajStrIsAlnum(alias)) ajFmtPrintF(cachef, "ALIAS %S %S\n", alias, ensDatabaseadaptorGetSpecies(dba)); ajStrDel(&alias); } ajFmtPrintF(cachef, "\n"); } /* Ensembl Database Adaptor objects *must not* be deleted. */ } ajStrDel(&spname); } ajListstrFree(&aliases); ajListFree(&dbas); ajStrDel(&dbcurl); ajStrDel(&svrurl); ajStrDel(&dbname); ajStrDel(&svrname); ajFileClose(&outf); ajFileClose(&cachef); embExit(); return EXIT_SUCCESS; }