/** * Handle the -biojava option * * <p>Command line syntax: art -biojava org.biojava.bio.seq.io.EmblLikeFormat foo.embl * * <p>BioJava formats: EmblLikeFormat, FastaFormat, GAMEFormat, GenbankFormat, PhredFormat */ private void handleBioJava(final String[] args) { if (args.length == 3) { final String class_name = args[1]; final String location = args[2]; final Document location_document = DocumentFactory.makeDocument(location); try { final Object biojava_object = Class.forName(class_name).newInstance(); final EntryInformation entry_information = Options.getArtemisEntryInformation(); final uk.ac.sanger.artemis.io.BioJavaEntry emblEntry; if (biojava_object instanceof SequenceFormat) { final SequenceFormat sequence_format = (SequenceFormat) biojava_object; emblEntry = new uk.ac.sanger.artemis.io.BioJavaEntry( entry_information, location_document, sequence_format); final Entry new_entry = new Entry(emblEntry); final EntryEdit new_entry_edit = makeEntryEdit(new_entry); new_entry_edit.setVisible(true); } else new MessageDialog(this, "not a SequenceFormat: " + class_name); } catch (IllegalAccessException e) { new MessageDialog(this, "cannot create class: " + class_name + " - IllegalAccessException"); } catch (ClassNotFoundException e) { new MessageDialog(this, "cannot find class: " + class_name); } catch (ClassCastException e) { new MessageDialog(this, class_name + " is not a sub-class of " + "SequenceFormat"); } catch (IOException e) { new MessageDialog(this, "I/O error while reading from " + location + ": " + e.getMessage()); } catch (NoSequenceException e) { new MessageDialog(this, location + " contained no sequence"); } catch (InstantiationException e) { new MessageDialog(this, "cannot instantiate " + class_name); } catch (OutOfRangeException e) { new MessageDialog( this, "read failed: one of the features in " + location + " has an out of range location: " + e.getMessage()); } } else new MessageDialog(this, "the -biojava option needs two arguments"); }
/** * Get the String residing on the clipboard. * * @return any text found on the Clipboard; if none found, return an empty String. */ public void openClipboardContents() { Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); // odd: the Object param of getContents is not currently used Transferable contents = clipboard.getContents(null); boolean hasTransferableText = (contents != null) && contents.isDataFlavorSupported(DataFlavor.stringFlavor); if (hasTransferableText) { TextDocument entry_document = new TextDocument(); final InputStreamProgressListener progress_listener = getInputStreamProgressListener(); entry_document.addInputStreamProgressListener(progress_listener); final EntryInformation artemis_entry_information = Options.getArtemisEntryInformation(); final uk.ac.sanger.artemis.io.Entry new_embl_entry = EntryFileDialog.getEntryFromFile(this, entry_document, artemis_entry_information, false); if (new_embl_entry == null) // the read failed return; try { final Entry entry = new Entry(new_embl_entry); EntryEdit last_entry_edit = makeEntryEdit(entry); addEntryEdit(last_entry_edit); getStatusLabel().setText(""); last_entry_edit.setVisible(true); } catch (OutOfRangeException e) { new MessageDialog( this, "read failed: one of the features in " + " cut and paste has an out of range " + "location: " + e.getMessage()); } catch (NoSequenceException e) { new MessageDialog(this, "read failed: " + " cut and paste contains no sequence"); } } }
/** Read the entries given in the uk.ac.sanger.artemis.ini file. */ private void readDefaultEntries() { final EntryInformation artemis_entry_information = Options.getArtemisEntryInformation(); final String default_sequence_file_name = Options.getOptions().getDefaultSequenceFileName(); final String default_feature_file_name = Options.getOptions().getDefaultFeatureFileName(); if (default_sequence_file_name != null) { final String default_sequence_file_name_embl = default_sequence_file_name + "_embl"; uk.ac.sanger.artemis.io.Entry new_embl_entry = null; // try opening the default sequence file with "_embl" added to the name // if that fails try the plain sequence file name final Document entry_document = DocumentFactory.makeDocument(default_sequence_file_name_embl); final InputStreamProgressListener progress_listener = getInputStreamProgressListener(); entry_document.addInputStreamProgressListener(progress_listener); if (entry_document.readable()) { new_embl_entry = EntryFileDialog.getEntryFromFile( this, entry_document, artemis_entry_information, false); } if (new_embl_entry == null || new_embl_entry.getSequence() == null || new_embl_entry.getSequence().length() == 0) { final File entry_file = new File(default_sequence_file_name); if (entry_file.exists()) { new_embl_entry = EntryFileDialog.getEntryFromFile( this, entry_document, artemis_entry_information, false); } else { // read failed System.err.println( "file does not exist: " + default_sequence_file_name + "(given in options files)"); return; } } if (new_embl_entry == null || new_embl_entry.getSequence() == null || new_embl_entry.getSequence().length() == 0) { // read failed System.err.println( "failed to read " + default_sequence_file_name + "(given in options files)"); return; } getStatusLabel().setText(""); try { final Entry entry = new Entry(new_embl_entry); final EntryEdit new_entry_edit = makeEntryEdit(entry); new_entry_edit.setVisible(true); if (default_feature_file_name != null) { final Document feature_document = DocumentFactory.makeDocument(default_feature_file_name); final uk.ac.sanger.artemis.io.Entry new_embl_table_entry = EntryFileDialog.getEntryFromFile( this, feature_document, artemis_entry_information, false); if (new_embl_table_entry == null) // open failed return; final EntryGroup entry_group = new_entry_edit.getEntryGroup(); final Entry new_table_entry = new Entry(entry.getBases(), new_embl_table_entry); entry_group.add(new_table_entry); } } catch (OutOfRangeException e) { new MessageDialog( this, "read failed: one of the features in " + default_feature_file_name + " has an out of range location: " + e.getMessage()); } catch (NoSequenceException e) { new MessageDialog( this, "read failed: " + new_embl_entry.getName() + " contains no sequence"); } } }
/** Read the entries named in args and in the diana.ini file. */ protected void readArgsAndOptions(final String[] args) { if (args.length == 0) { if (System.getProperty("chado") != null && (args.length < 1 || args[0].indexOf(':') == -1)) fm = new LocalAndRemoteFileManager(ArtemisMain.this); // open the entries given in the options file(diana.ini) readDefaultEntries(); return; } if (args[0].equals("-biojava")) { handleBioJava(args); return; } final EntryInformation artemis_entry_information = Options.getArtemisEntryInformation(); EntryEdit last_entry_edit = null; boolean seen_plus = false; for (int i = 0; i < args.length; ++i) { String new_entry_name = args[i]; if (new_entry_name.length() == 0) continue; if (new_entry_name.equals("+")) { seen_plus = true; continue; } if (new_entry_name.startsWith("+") && last_entry_edit != null || seen_plus) { // new feature file final Document entry_document; if (seen_plus) entry_document = DocumentFactory.makeDocument(new_entry_name); else entry_document = DocumentFactory.makeDocument(new_entry_name.substring(1)); final InputStreamProgressListener progress_listener = getInputStreamProgressListener(); entry_document.addInputStreamProgressListener(progress_listener); final uk.ac.sanger.artemis.io.Entry new_embl_entry = EntryFileDialog.getEntryFromFile( this, entry_document, artemis_entry_information, false); if (new_embl_entry == null) // the read failed break; try { final Entry new_entry = new Entry(last_entry_edit.getEntryGroup().getBases(), new_embl_entry); last_entry_edit.getEntryGroup().add(new_entry); } catch (OutOfRangeException e) { new MessageDialog( this, "read failed: one of the features in " + new_entry_name + " has an out of range " + "location: " + e.getMessage()); } } else if (System.getProperty("chado") != null && new_entry_name.indexOf(':') > -1) { // open from database e.g. Pfalciparum:Pf3D7_09:95000..150000 Splash.logger4j.info("OPEN ENTRY " + new_entry_name); getStatusLabel().setText("Connecting ..."); DatabaseEntrySource entry_source = new DatabaseEntrySource(); boolean promptUser = true; if (System.getProperty("read_only") != null) { promptUser = false; entry_source.setReadOnly(true); } if (!entry_source.setLocation(promptUser)) return; last_entry_edit = DatabaseJPanel.show( entry_source, this, getInputStreamProgressListener(), new_entry_name); } else { // new sequence file if (last_entry_edit != null) { last_entry_edit.setVisible(true); last_entry_edit = null; } if (new_entry_name.indexOf("://") == -1) { File file = new File(new_entry_name); if (!file.exists()) { JOptionPane.showMessageDialog( null, "File " + new_entry_name + " not found.\n" + "Check the file name.", "File Not Found", JOptionPane.WARNING_MESSAGE); } } final Document entry_document = DocumentFactory.makeDocument(new_entry_name); entry_document.addInputStreamProgressListener(getInputStreamProgressListener()); final uk.ac.sanger.artemis.io.Entry new_embl_entry = EntryFileDialog.getEntryFromFile( this, entry_document, artemis_entry_information, false); if (new_embl_entry == null) // the read failed break; try { final Entry entry = new Entry(new_embl_entry); last_entry_edit = makeEntryEdit(entry); addEntryEdit(last_entry_edit); getStatusLabel().setText(""); } catch (OutOfRangeException e) { new MessageDialog( this, "read failed: one of the features in " + new_entry_name + " has an out of range " + "location: " + e.getMessage()); break; } catch (NoSequenceException e) { new MessageDialog(this, "read failed: " + new_entry_name + " contains no sequence"); break; } } } if (System.getProperty("offset") != null) last_entry_edit.getGotoEventSource().gotoBase(Integer.parseInt(System.getProperty("offset"))); last_entry_edit.setVisible(true); for (int entry_index = 0; entry_index < entry_edit_objects.size(); ++entry_index) { if (System.getProperty("offset") != null) entry_edit_objects .elementAt(entry_index) .getGotoEventSource() .gotoBase(Integer.parseInt(System.getProperty("offset"))); } }