@@ -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