Skip to content

Commit aaf550b

Browse files
committed
Use GUID for search redirect, not trackId
1 parent 4583a3c commit aaf550b

1 file changed

Lines changed: 45 additions & 10 deletions

File tree

mGAP/src/org/labkey/mgap/mGAPController.java

Lines changed: 45 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -964,15 +964,10 @@ public URLHelper getRedirectURL(GenomeBrowserForm form)
964964
// This requires trackId
965965
if ("variantSearch".equals(actionName))
966966
{
967-
Collection<String> trackIDs = getTracks(target, jbrowseDatabaseId, ctx.getString("mgapReleaseGUID"), Collections.singletonList("mGAP Release"));
968-
if (!trackIDs.isEmpty())
967+
String trackGUID = getPrimaryTrackUUID(target, jbrowseDatabaseId, ctx.getString("mgapReleaseGUID"));
968+
if (trackGUID != null)
969969
{
970-
if (trackIDs.size() > 1)
971-
{
972-
_log.error("More than one track found matching 'mGAP Release' for release: " + ctx.getString("mgapReleaseGUID") + ", with jbrowse ID: " + jbrowseDatabaseId + ". they were: " + StringUtils.join(trackIDs, ";"));
973-
}
974-
975-
params.put("trackId", new String[]{trackIDs.iterator().next()});
970+
params.put("trackId", new String[]{trackGUID});
976971
}
977972
else
978973
{
@@ -984,7 +979,7 @@ public URLHelper getRedirectURL(GenomeBrowserForm form)
984979
if (trackName != null)
985980
{
986981
List<String> trackNames = Arrays.asList(trackName.split(","));
987-
Collection<String> trackIDs = getTracks(target, jbrowseDatabaseId, ctx.getString("mgapReleaseGUID"), trackNames);
982+
Collection<String> trackIDs = getAllVisibleTracks(target, jbrowseDatabaseId, ctx.getString("mgapReleaseGUID"), trackNames);
988983
if (!trackIDs.isEmpty())
989984
{
990985
params.put("tracks", new String[]{StringUtils.join(trackIDs, ",")});
@@ -1015,7 +1010,46 @@ public URLHelper getRedirectURL(GenomeBrowserForm form)
10151010
return ret;
10161011
}
10171012

1018-
public Collection<String> getTracks(Container target, String jbrowseSession, String releaseId, List<String> trackNames)
1013+
public String getPrimaryTrackUUID(Container target, String jbrowseSession, String releaseId)
1014+
{
1015+
final String trackName = "mGAP Release";
1016+
1017+
UserSchema mgap = QueryService.get().getUserSchema(getUser(), target, mGAPSchema.NAME);
1018+
UserSchema jbrowse = QueryService.get().getUserSchema(getUser(), target, "jbrowse");
1019+
1020+
//find the selected track:
1021+
SimpleFilter trackFilter = new SimpleFilter(FieldKey.fromString("releaseId"), releaseId);
1022+
trackFilter.addCondition(FieldKey.fromString("trackName"), trackName, CompareType.EQUAL);
1023+
List<Integer> outputFileIds = new TableSelector(mgap.getTable(mGAPSchema.TABLE_TRACKS_PER_RELEASE), PageFlowUtil.set("vcfId"), trackFilter, null).getArrayList(Integer.class);
1024+
if (outputFileIds.isEmpty())
1025+
{
1026+
_log.error("Unable to find track: " + jbrowseSession + " / " + releaseId + " / " + trackName);
1027+
return null;
1028+
}
1029+
else if (outputFileIds.size() > 1)
1030+
{
1031+
_log.error("More than one matching outputfile found, using first: " + jbrowseSession + " / " + releaseId + " / " + trackName);
1032+
}
1033+
1034+
//now database members from these outputFileIds:
1035+
TableInfo databaseMembers = jbrowse.getTable("database_members");
1036+
SimpleFilter dbFilter = new SimpleFilter(FieldKey.fromString("database"), jbrowseSession);
1037+
dbFilter.addCondition(FieldKey.fromString("jsonfile/outputfile"), outputFileIds.get(0), CompareType.EQUAL);
1038+
List<String> guids = new TableSelector(databaseMembers, PageFlowUtil.set("jsonfile"), dbFilter, null).getArrayList(String.class);
1039+
if (guids.isEmpty())
1040+
{
1041+
_log.error("No database_members found for track: " + jbrowseSession + " / " + releaseId + " / " + trackName + " / " + outputFileIds.get(0));
1042+
return null;
1043+
}
1044+
else if (guids.size() > 1)
1045+
{
1046+
_log.error("More than one matching database_member record found, using first: " + jbrowseSession + " / " + releaseId + " / " + trackName + " / " + outputFileIds.get(0));
1047+
}
1048+
1049+
return guids.get(0);
1050+
}
1051+
1052+
public Collection<String> getAllVisibleTracks(Container target, String jbrowseSession, String releaseId, List<String> trackNames)
10191053
{
10201054
Set<String> ret = new LinkedHashSet<>();
10211055

@@ -1088,6 +1122,7 @@ public Collection<String> getTracks(Container target, String jbrowseSession, Str
10881122
{
10891123
_log.error("Unable to find the default jbrowse session associated with genome: " + genomeId);
10901124
}
1125+
10911126
return ret;
10921127
}
10931128
}

0 commit comments

Comments
 (0)