+ };
+ final List<SequenceI> seqsWithoutSourceDBRef = new ArrayList<SequenceI>();
+
+ final Runnable discoverCanonicalDBrefs = new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ long progressId = System.currentTimeMillis();
+
+ int y = seqsWithoutSourceDBRef.size();
+
+ setProgressBar(MessageManager.formatMessage(
+ "status.fetching_dbrefs_for_sequences_without_valid_refs",
+ y), progressId);
+ SequenceI[] seqWithoutSrcDBRef = seqsWithoutSourceDBRef
+ .toArray(new SequenceI[y]);
+
+ DBRefFetcher dbRefFetcher = new DBRefFetcher(seqWithoutSrcDBRef,
+ progressBar, new DbSourceProxy[]
+ { new jalview.ws.dbsources.Uniprot() },
+ null, false);
+
+ dbRefFetcher.fetchDBRefs(true);
+
+ setProgressBar("Fetch complete.", progressId); // todo i18n
+
+ Executors.defaultThreadFactory().newThread(discoverPDBStructures).start();
+ }
+ };
+
+ Executors.defaultThreadFactory().newThread(new Runnable()
+ {
+ public void run()
+ {
+
+ for (SequenceI seq : selectedSequences)
+ {
+ if (seq.isProtein())
+ {
+ int dbRef = ThreeDBStructureChooserQuerySource
+ .checkUniprotRefs(seq.getDBRefs());
+ if (dbRef < 0)
+ {
+ if (seq.getAllPDBEntries()==null && seq.getAllPDBEntries().size()==0)
+ {
+ seqsWithoutSourceDBRef.add(seq);
+ }
+ }
+ }
+ }
+ // retrieve database refs for protein sequences
+ if (!seqsWithoutSourceDBRef.isEmpty())
+ {
+ // need cancel and no to result in the discoverPDB action - mocked is 'cancel'
+ JvOptionPane.newOptionDialog(Desktop.getDesktop())
+ .setResponseHandler(JvOptionPane.OK_OPTION, discoverCanonicalDBrefs)
+ .setResponseHandler(JvOptionPane.CANCEL_OPTION, discoverPDBStructures)
+ .setResponseHandler(JvOptionPane.NO_OPTION, discoverPDBStructures)
+ .showDialog(MessageManager.formatMessage("label.fetch_references_for",
+ seqsWithoutSourceDBRef.size()), MessageManager.getString(
+ "label.fetch_uniprot_references"),
+ JvOptionPane.YES_NO_OPTION,
+ JvOptionPane.PLAIN_MESSAGE, null, new Object[]
+ { MessageManager.getString("action.ok"),
+ MessageManager.getString("action.cancel") },
+ MessageManager.getString("action.ok"));
+ } else {
+ // get structures directly
+ Executors.defaultThreadFactory().newThread(discoverPDBStructures).start();
+ }
+ };
+ }).start();;
+