+ launchStructureViewer(ssm,
+ new PDBEntry[] { fileEntry }, ap,
+ new SequenceI[] { selectedSequence });
+ }
+ else if (currentView == VIEWS_PHYRE2_PREDICTION)
+ {
+ SequenceI userSelectedSeq = ((AssociateSeqOptions) phyre2InputAssSeqPanel
+ .getCmb_assSeq().getSelectedItem()).getSequence();
+ if (userSelectedSeq != null)
+ {
+ selectedSequence = userSelectedSeq;
+ }
+ int templateColIndex = getPhyreResultTable()
+ .getColumn("Template")
+ .getModelIndex();
+ int[] selectedRows = getPhyreResultTable().getSelectedRows();
+ PDBEntry[] pdbEntriesToView = new PDBEntry[selectedRows.length];
+ int count = 0;
+ for (int row : selectedRows)
+ {
+ String templateId = getPhyreResultTable().getValueAt(row,
+ templateColIndex).toString();
+ String structureFile = phyre2ResultDirectory + templateId;
+ pdbEntriesToView[count++] = new AssociateStructureFileWithSeq()
+ .associateStructureWithSeq(structureFile,
+ DataSourceType.FILE, selectedSequence, true,
+ Desktop.instance);
+ }
+
+ final StructureSelectionManager ssm = ap
+ .getStructureSelectionManager();
+ ssm.setMappingForPhyre2Model(true);
+ final long progressSessionId = System.currentTimeMillis();
+ ssm.setProgressSessionId(progressSessionId);
+
+ SequenceI[] sequences = new SequenceI[] { selectedSequence };
+
+ ssm.setProgressBar(MessageManager
+ .getString("status.launching_3d_structure_viewer"));
+ final StructureViewer sViewer = new StructureViewer(ssm);
+ if (pdbEntriesToView.length > 1)
+ {
+ ArrayList<SequenceI[]> seqsMap = new ArrayList<SequenceI[]>();
+ for (SequenceI seq : sequences)
+ {
+ seqsMap.add(new SequenceI[] { seq });
+ }
+ SequenceI[][] collatedSeqs = seqsMap
+ .toArray(new SequenceI[0][0]);
+ ssm.setProgressBar(null);
+ ssm.setProgressBar(MessageManager
+ .getString("status.fetching_3d_structures_for_selected_entries"));
+ sViewer.viewStructures(pdbEntriesToView, collatedSeqs, ap);
+ }
+ else
+ {
+ ssm.setProgressBar(null);
+ ssm.setProgressBar(MessageManager.formatMessage(
+ "status.fetching_3d_structures_for",
+ pdbEntriesToView[0].getId()));
+ sViewer.viewStructures(pdbEntriesToView[0], sequences, ap);
+ }
+ }
+ closeAction(preferredHeight);
+ }
+ }).start();
+ }
+
+ private String phyre2ResultDirectory;
+
+ @Override
+ public void predict3DModelWithPhyre2()
+ {
+ // TODO implement code for submitting sequence to Phyre2 service, and code
+ // for getting the result directory when the job completes, this is
+ // currently hard-wired to the directory of result for FER_CAPAN/1-144
+ phyre2ResultDirectory = "examples/testdata/phyre2results/56da5616b4559c93/";
+ // String summaryhtml = phyre2ResultDirectory + "summary.html";
+ // // TODO ditch HTML parsing once appropriated data file (i.e. JSON) for
+ // // Phyre2 result summary is made available
+ // List<Phyre2SummaryPojo> phyreResults = Phyre2Client
+ // .parsePhyre2ResultSummaryTable(summaryhtml);
+
+ String crudeListFile = phyre2ResultDirectory + "crudelist";
+ List<Phyre2SummaryPojo> phyreResults = Phyre2Client
+ .parsePhyreCrudeList(crudeListFile);
+
+ getPhyreResultTable()
+ .setModel(Phyre2Client.getTableModel(phyreResults));
+ Phyre2Client.configurePhyreResultTable(getPhyreResultTable());
+ }
+
+ private PDBEntry getFindEntry(String id, Vector<PDBEntry> pdbEntries)
+ {
+ Objects.requireNonNull(id);
+ Objects.requireNonNull(pdbEntries);
+ PDBEntry foundEntry = null;
+ for (PDBEntry entry : pdbEntries)
+ {
+ if (entry.getId().equalsIgnoreCase(id))
+ {
+ return entry;
+ }