X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Ffts%2Fservice%2Fthreedbeacons%2FTDBeaconsFTSPanel.java;h=6ca3ca2ee4646b30ca0f46bebff924d71100e189;hb=d654b1f014790b7ae25e6eec631847170a930987;hp=0d79d9b2ebb2434a26200261a6c9f847415938d9;hpb=0b4e71bc98cc0071159b05a0358e1e36b6bb1361;p=jalview.git diff --git a/src/jalview/fts/service/threedbeacons/TDBeaconsFTSPanel.java b/src/jalview/fts/service/threedbeacons/TDBeaconsFTSPanel.java index 0d79d9b..6ca3ca2 100644 --- a/src/jalview/fts/service/threedbeacons/TDBeaconsFTSPanel.java +++ b/src/jalview/fts/service/threedbeacons/TDBeaconsFTSPanel.java @@ -1,3 +1,23 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.fts.service.threedbeacons; import java.io.BufferedReader; @@ -10,9 +30,13 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import javax.swing.SwingUtilities; + import org.json.JSONArray; import org.json.JSONObject; +import jalview.bin.Console; +import jalview.datamodel.AlignmentI; import jalview.fts.api.FTSDataColumnI; import jalview.fts.api.FTSRestClientI; import jalview.fts.core.FTSRestRequest; @@ -20,11 +44,16 @@ import jalview.fts.core.FTSRestResponse; import jalview.fts.core.GFTSPanel; import jalview.fts.service.pdb.PDBFTSRestClient; import jalview.gui.SequenceFetcher; +import jalview.io.DataSourceType; +import jalview.io.FileFormat; +import jalview.io.FileFormatI; +import jalview.io.FileLoader; +import jalview.io.FormatAdapter; import jalview.util.MessageManager; @SuppressWarnings("serial") public class TDBeaconsFTSPanel extends GFTSPanel -{ +{ private static String defaultFTSFrameTitle = MessageManager .getString("label.pdb_sequence_fetcher"); @@ -33,81 +62,19 @@ public class TDBeaconsFTSPanel extends GFTSPanel private static final String THREEDB_FTS_CACHE_KEY = "CACHE.THREEDB_FTS"; private static final String THREEDB_AUTOSEARCH = "FTS.THREEDB.AUTOSEARCH"; - + private static HttpURLConnection connection; - + public TDBeaconsFTSPanel(SequenceFetcher fetcher) { - super(fetcher); - pageLimit = TDBeaconsFTSRestClient.getInstance().getDefaultResponsePageSize(); + // no ID retrieval option for TD Beacons just now + super(null); + pageLimit = TDBeaconsFTSRestClient.getInstance() + .getDefaultResponsePageSize(); this.seqFetcher = fetcher; this.progressIndicator = (fetcher == null) ? null : fetcher.getProgressIndicator(); } - - public int TDBeaconsFTSPanel2(String result) - { - int seqlength = executeParse(result); - return seqlength; - } - - public static int executeParse(String query) { - BufferedReader reader; - String line; - StringBuffer responseContent = new StringBuffer(); - try { - URL url = new URL("https://wwwdev.ebi.ac.uk/pdbe/pdbe-kb/3dbeacons-hub-api/uniprot/summary/" + query + ".json"); - connection = (HttpURLConnection) url.openConnection(); - connection.setRequestMethod("GET"); - connection.setConnectTimeout(5000); // <=>5seconds - connection.setReadTimeout(5000); - // Status check up, 200 = connection succesful - int status = connection.getResponseCode(); - // System.out.println(status); - - if (status > 299) { - reader = new BufferedReader(new InputStreamReader(connection.getErrorStream())); - while ((line = reader.readLine()) != null) { - responseContent.append(line); - } - reader.close(); - } else { - reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); - while ((line = reader.readLine()) != null) { - responseContent.append(line); - } - reader.close(); - } - //System.out.println(responseContent.toString()); - int seq = parse(responseContent.toString()); - return seq; - - } catch (MalformedURLException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } finally { - connection.disconnect(); - } - return (Integer) null; - - } - - public static int parse(String jsonString) { - JSONObject entry = new JSONObject(jsonString); - System.out.println(entry); - int length = entry.getJSONObject("uniprot_entry").getInt("sequence_length"); - String ac = entry.getJSONObject("uniprot_entry").getString("ac"); - - JSONArray structures = entry.getJSONArray("structures"); - for (int i=0 ; i < structures.length() ; i++) { - String id = structures.getJSONObject(i).getString("model_identifier"); - System.out.println("identifier num " + i + " : " + id); - } - System.out.println("length : " + length + "; access name : " + ac); - return length; - -} @Override public void searchAction(boolean isFreshSearch) @@ -138,11 +105,12 @@ public class TDBeaconsFTSPanel extends GFTSPanel FTSRestRequest request = new FTSRestRequest(); request.setAllowEmptySeq(allowEmptySequence); request.setResponseSize(100); - request.setFieldToSearchBy("(" + searchTarget + ":"); - request.setSearchTerm(searchTerm + ")"); + // expect it to be uniprot accesssion + request.setSearchTerm(searchTerm + ".json"); request.setOffSet(offSet); request.setWantedFields(wantedFields); - FTSRestClientI tdbRestClient = TDBeaconsFTSRestClient.getInstance(); + FTSRestClientI tdbRestClient = TDBeaconsFTSRestClient + .getInstance(); FTSRestResponse resultList; try { @@ -175,7 +143,8 @@ public class TDBeaconsFTSPanel extends GFTSPanel if (isPaginationEnabled() && resultSetCount > 0) { - String f1 = totalNumberformatter.format(Integer.valueOf(offSet + 1)); + String f1 = totalNumberformatter + .format(Integer.valueOf(offSet + 1)); String f2 = totalNumberformatter .format(Integer.valueOf(offSet + resultSetCount)); String f3 = totalNumberformatter @@ -199,14 +168,14 @@ public class TDBeaconsFTSPanel extends GFTSPanel } }.start(); } - + @Override public void okAction() { // mainFrame.dispose(); disableActionButtons(); StringBuilder selectedIds = new StringBuilder(); - HashSet selectedIdsSet = new HashSet<>(); + final HashSet selectedIdsSet = new HashSet<>(); int primaryKeyColIndex = 0; try { @@ -222,12 +191,12 @@ public class TDBeaconsFTSPanel extends GFTSPanel { String idStr = getResultTable() .getValueAt(summaryRow, primaryKeyColIndex).toString(); - selectedIdsSet.add(searchTerm); + selectedIdsSet.add(idStr); } for (String idStr : paginatorCart) { - selectedIdsSet.add(searchTerm); + selectedIdsSet.add(idStr); } for (String selectedId : selectedIdsSet) @@ -235,19 +204,57 @@ public class TDBeaconsFTSPanel extends GFTSPanel selectedIds.append(selectedId).append(";"); } - String ids = selectedIds.toString(); - seqFetcher.setQuery(ids); - Thread worker = new Thread(seqFetcher); - worker.start(); + SwingUtilities.invokeLater(new Runnable() + { + @Override + public void run() + { + AlignmentI allSeqs = null; + FormatAdapter fl = new jalview.io.FormatAdapter(); + for (String tdbURL : selectedIdsSet) + { + try + { + // retrieve the structure via its URL + AlignmentI tdbAl = fl.readFile(tdbURL, DataSourceType.URL, + FileFormat.MMCif); + + // TODO: pad structure according to its Uniprot Start so all line up + // w.r.t. the Uniprot reference sequence + // TODO: give the structure a sensible name (not the giant URL *:o) + // ) + if (tdbAl != null) + { + if (allSeqs != null) + { + allSeqs.append(tdbAl); + } + else + { + allSeqs = tdbAl; + } + } + } catch (Exception x) + { + Console.warn("Couldn't retrieve 3d-beacons model for uniprot id" + + searchTerm + " : " + tdbURL, x); + } + } + seqFetcher.parseResult(allSeqs, + "3D-Beacons models for " + searchTerm, FileFormat.MMCif, + null); + + } + }); delayAndEnableActionButtons(); } - + @Override public FTSRestClientI getFTSRestClient() { return TDBeaconsFTSRestClient.getInstance(); } - + @Override public String getFTSFrameTitle() { @@ -282,10 +289,11 @@ public class TDBeaconsFTSPanel extends GFTSPanel protected void showHelp() { System.out.println("No help implemented yet."); - + } - - public static String decodeSearchTerm(String enteredText) { + + public static String decodeSearchTerm(String enteredText) + { // no multiple query support yet return enteredText; }