*/
package jalview.gui;
-import java.beans.*;
-import java.io.*;
-import java.util.*;
-
-import java.awt.*;
-import java.awt.datatransfer.*;
-import java.awt.dnd.*;
-import java.awt.event.*;
-import java.awt.print.*;
-import javax.swing.*;
-import javax.swing.event.MenuEvent;
-
-import jalview.analysis.*;
+import jalview.analysis.AAFrequency;
+import jalview.analysis.AlignmentSorter;
+import jalview.analysis.Conservation;
+import jalview.analysis.CrossRef;
+import jalview.analysis.NJTree;
+import jalview.analysis.ParseProperties;
+import jalview.analysis.SequenceIdMatcher;
import jalview.bin.Cache;
-import jalview.commands.*;
-import jalview.datamodel.*;
-import jalview.io.*;
-import jalview.jbgui.*;
-import jalview.schemes.*;
-import jalview.ws.*;
+import jalview.commands.CommandI;
+import jalview.commands.EditCommand;
+import jalview.commands.OrderCommand;
+import jalview.commands.RemoveGapColCommand;
+import jalview.commands.RemoveGapsCommand;
+import jalview.commands.SlideSequencesCommand;
+import jalview.commands.TrimRegionCommand;
+import jalview.datamodel.AlignedCodonFrame;
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.AlignmentOrder;
+import jalview.datamodel.AlignmentView;
+import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.PDBEntry;
+import jalview.datamodel.SeqCigar;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceGroup;
+import jalview.datamodel.SequenceI;
+import jalview.io.AlignmentProperties;
+import jalview.io.AnnotationFile;
+import jalview.io.FeaturesFile;
+import jalview.io.FileLoader;
+import jalview.io.FormatAdapter;
+import jalview.io.HTMLOutput;
+import jalview.io.IdentifyFile;
+import jalview.io.JalviewFileChooser;
+import jalview.io.JalviewFileView;
+import jalview.io.JnetAnnotationMaker;
+import jalview.io.NewickFile;
+import jalview.jbgui.GAlignFrame;
+import jalview.schemes.Blosum62ColourScheme;
+import jalview.schemes.BuriedColourScheme;
+import jalview.schemes.ClustalxColourScheme;
+import jalview.schemes.ColourSchemeI;
+import jalview.schemes.ColourSchemeProperty;
+import jalview.schemes.HelixColourScheme;
+import jalview.schemes.HydrophobicColourScheme;
+import jalview.schemes.NucleotideColourScheme;
+import jalview.schemes.PIDColourScheme;
+import jalview.schemes.ResidueProperties;
+import jalview.schemes.StrandColourScheme;
+import jalview.schemes.TaylorColourScheme;
+import jalview.schemes.TurnColourScheme;
+import jalview.schemes.UserColourScheme;
+import jalview.schemes.ZappoColourScheme;
import jalview.ws.jws1.Discoverer;
import jalview.ws.jws2.Jws2Discoverer;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.GridLayout;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DropTargetDragEvent;
+import java.awt.dnd.DropTargetDropEvent;
+import java.awt.dnd.DropTargetEvent;
+import java.awt.dnd.DropTargetListener;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.print.PageFormat;
+import java.awt.print.PrinterJob;
+import java.beans.PropertyChangeEvent;
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Vector;
+
+import javax.swing.JButton;
+import javax.swing.JEditorPane;
+import javax.swing.JInternalFrame;
+import javax.swing.JLabel;
+import javax.swing.JLayeredPane;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+import javax.swing.JRadioButtonMenuItem;
+import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
+
/**
* DOCUMENT ME!
*
{
String choice = chooser.getSelectedFile().getPath();
jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
- loadJalviewDataFile(choice);
+ loadJalviewDataFile(choice, null, null, null);
}
}
{
newView(true);
}
+
/**
*
- * @param copyAnnotation if true then duplicate all annnotation, groups and settings
+ * @param copyAnnotation
+ * if true then duplicate all annnotation, groups and settings
* @return new alignment panel, already displayed.
*/
public AlignmentPanel newView(boolean copyAnnotation)
{
return newView(null, copyAnnotation);
}
+
/**
*
- * @param viewTitle title of newly created view
+ * @param viewTitle
+ * title of newly created view
* @return new alignment panel, already displayed.
*/
public AlignmentPanel newView(String viewTitle)
{
return newView(viewTitle, true);
}
+
/**
*
- * @param viewTitle title of newly created view
- * @param copyAnnotation if true then duplicate all annnotation, groups and settings
+ * @param viewTitle
+ * title of newly created view
+ * @param copyAnnotation
+ * if true then duplicate all annnotation, groups and settings
* @return new alignment panel, already displayed.
*/
public AlignmentPanel newView(String viewTitle, boolean copyAnnotation)
{
// just remove all the current annotation except for the automatic stuff
newap.av.alignment.deleteAllGroups();
- for (AlignmentAnnotation alan: newap.av.alignment.getAlignmentAnnotation())
+ for (AlignmentAnnotation alan : newap.av.alignment
+ .getAlignmentAnnotation())
{
if (!alan.autoCalculated)
{
newap.av.alignment.deleteAnnotation(alan);
- };
+ }
+ ;
}
}
newap.av.redoList = viewport.redoList;
int index = Desktop.getViewCount(viewport.getSequenceSetId());
- // make sure the new view has a unique name - this is essential for Jalview 2 archives
+ // make sure the new view has a unique name - this is essential for Jalview
+ // 2 archives
boolean addFirstIndex = false;
- if (viewTitle==null || viewTitle.trim().length()==0)
+ if (viewTitle == null || viewTitle.trim().length() == 0)
{
viewTitle = "View";
addFirstIndex = true;
- } else {
- index=1;// we count from 1 if given a specific name
}
- String newViewName = viewTitle + ((addFirstIndex) ? " "+index : "");
+ else
+ {
+ index = 1;// we count from 1 if given a specific name
+ }
+ String newViewName = viewTitle + ((addFirstIndex) ? " " + index : "");
Vector comps = (Vector) PaintRefresher.components.get(viewport
.getSequenceSetId());
Vector existingNames = new Vector();
while (existingNames.contains(newViewName))
{
- newViewName = viewTitle + " "+(++index);
+ newViewName = viewTitle + " " + (++index);
}
newap.av.viewName = newViewName;
{
JEditorPane editPane = new JEditorPane("text/html", "");
editPane.setEditable(false);
- StringBuffer contents = new AlignmentProperties(viewport.alignment).formatAsHtml();
- editPane.setText("<html>"+contents.toString() + "</html>");
+ StringBuffer contents = new AlignmentProperties(viewport.alignment)
+ .formatAsHtml();
+ editPane.setText("<html>" + contents.toString() + "</html>");
JInternalFrame frame = new JInternalFrame();
frame.getContentPane().add(new JScrollPane(editPane));
}
// TODO: remove this code when 2.7 is released
// DEBUG - alignmentView
- /*JMenuItem testAlView = new JMenuItem("Test AlignmentView");
- final AlignFrame af = this;
- testAlView.addActionListener(new ActionListener() {
-
- @Override
- public void actionPerformed(ActionEvent e)
- {
- jalview.datamodel.AlignmentView.testSelectionViews(af.viewport.alignment, af.viewport.colSel, af.viewport.selectionGroup);
- }
-
- });
- webService.add(testAlView);*/
- // TODO: refactor to RestClient discoverer and merge menu entries for rest-style services with other types of analysis/calculation service
+ /*
+ * JMenuItem testAlView = new JMenuItem("Test AlignmentView"); final
+ * AlignFrame af = this; testAlView.addActionListener(new ActionListener() {
+ *
+ * @Override public void actionPerformed(ActionEvent e) {
+ * jalview.datamodel.AlignmentView.testSelectionViews(af.viewport.alignment,
+ * af.viewport.colSel, af.viewport.selectionGroup); }
+ *
+ * }); webService.add(testAlView);
+ */
+ // TODO: refactor to RestClient discoverer and merge menu entries for
+ // rest-style services with other types of analysis/calculation service
// SHmmr test client - still being implemented.
- jalview.ws.rest.RestClient.makeShmmrRestClient().attachWSMenuEntry(webService, this);
+ jalview.ws.rest.RestClient.makeShmmrRestClient().attachWSMenuEntry(
+ webService, this);
// DEBUG - alignmentView
}
{
try
{
-
+ // check to see if any of these files have names matching sequences in
+ // the alignment
+ SequenceIdMatcher idm = new SequenceIdMatcher(viewport
+ .getAlignment().getSequencesArray());
+ /**
+ * Object[] { String,SequenceI}
+ */
+ ArrayList<Object[]> filesmatched = new ArrayList<Object[]>();
+ ArrayList<String> filesnotmatched = new ArrayList<String>();
for (int i = 0; i < files.size(); i++)
{
- loadJalviewDataFile(files.get(i).toString());
+ String file = files.get(i).toString();
+ String pdbfn = "";
+ String protocol = FormatAdapter.checkProtocol(file);
+ if (protocol == jalview.io.FormatAdapter.FILE)
+ {
+ File fl = new File(file);
+ pdbfn = fl.getName();
+ }
+ else if (protocol == jalview.io.FormatAdapter.URL)
+ {
+ URL url = new URL(file);
+ pdbfn = url.getFile();
+ }
+ if (pdbfn.length() > 0)
+ {
+ // attempt to find a match in the alignment
+ SequenceI mtch = idm.findIdMatch(pdbfn);
+ int l = 0, c = pdbfn.indexOf(".");
+ while (mtch == null && c != -1)
+ {
+ while ((c = pdbfn.indexOf(".", l)) > l)
+ {
+ l = c;
+ }
+ if (l > -1)
+ {
+ pdbfn = pdbfn.substring(0, l);
+ }
+ mtch = idm.findIdMatch(pdbfn);
+ }
+ if (mtch != null)
+ {
+ String type = null;
+ try
+ {
+ type = new IdentifyFile().Identify(file, protocol);
+ } catch (Exception ex)
+ {
+ type = null;
+ }
+ if (type != null)
+ {
+ if (type.equalsIgnoreCase("PDB"))
+ {
+ filesmatched.add(new Object[]
+ { file, protocol, mtch });
+ continue;
+ }
+ }
+ }
+ // File wasn't named like one of the sequences or wasn't a PDB file.
+ filesnotmatched.add(file);
+ }
+ }
+ int assocfiles = 0;
+ if (filesmatched.size() > 0)
+ {
+ if (Cache.getDefault("AUTOASSOCIATE_PDBANDSEQS", false)
+ || JOptionPane
+ .showConfirmDialog(
+ this,
+ "Do you want to automatically associate the "
+ + filesmatched.size()
+ + " PDB files with sequences in the alignment that have the same name ?",
+ "Automatically Associate PDB files by name",
+ JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
+
+ {
+ for (Object[] fm : filesmatched)
+ {
+ // try and associate
+ // TODO: may want to set a standard ID naming formalism for
+ // associating PDB files which have no IDs.
+ PDBEntry pe = new AssociatePdbFileWithSeq()
+ .associatePdbWithSeq((String) fm[0], (String) fm[1],
+ (SequenceI) fm[2], false);
+ if (pe != null)
+ {
+ System.err
+ .println("Associated file : " + ((String) fm[0])
+ + " with "
+ + ((SequenceI) fm[2]).getDisplayId(true));
+ assocfiles++;
+ }
+ alignPanel.paintAlignment(true);
+ }
+ }
+ }
+ if (filesnotmatched.size() > 0)
+ {
+ if (assocfiles > 0
+ && (Cache.getDefault(
+ "AUTOASSOCIATE_PDBANDSEQS_IGNOREOTHERS", false) || JOptionPane
+ .showConfirmDialog(
+ this,
+ "<html>Do you want to <em>ignore</em> the "
+ + filesnotmatched.size()
+ + " files whose names did not match any sequence IDs ?</html>",
+ "Ignore unmatched dropped files ?",
+ JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION))
+ {
+ return;
+ }
+ for (String fn : filesnotmatched)
+ {
+ loadJalviewDataFile(fn, null, null, null);
+ }
+
}
} catch (Exception ex)
{
* @param file
* either a filename or a URL string.
*/
- public void loadJalviewDataFile(String file)
+ public void loadJalviewDataFile(String file, String protocol,
+ String format, SequenceI assocSeq)
{
try
{
- String protocol = jalview.io.FormatAdapter.FILE;
- String f = file.toLowerCase();
- if (f.indexOf("http:") == 0 || f.indexOf("https:") == 0
- || f.indexOf("file:") == 0)
+ if (protocol == null)
{
- protocol = jalview.io.FormatAdapter.URL;
+ protocol = jalview.io.FormatAdapter.checkProtocol(file);
}
-
- boolean isAnnotation = new AnnotationFile().readAnnotationFile(
- viewport.alignment, file, protocol);
+ // if the file isn't identified, or not positively identified as some
+ // other filetype (PFAM is default unidentified alignment file type) then
+ // try to parse as annotation.
+ boolean isAnnotation = (format == null || format
+ .equalsIgnoreCase("PFAM")) ? new AnnotationFile()
+ .readAnnotationFile(viewport.alignment, file, protocol)
+ : false;
if (!isAnnotation)
{
// try to see if its a JNet 'concise' style annotation file *before* we
// try to parse it as a features file
- String format = new IdentifyFile().Identify(file, protocol);
+ if (format == null)
+ {
+ format = new IdentifyFile().Identify(file, protocol);
+ }
if (format.equalsIgnoreCase("JnetFile"))
{
jalview.io.JPredFile predictions = new jalview.io.JPredFile(file,
}
else
{
+ /*
+ * if (format.equalsIgnoreCase("PDB")) {
+ *
+ * String pdbfn = ""; // try to match up filename with sequence id try
+ * { if (protocol == jalview.io.FormatAdapter.FILE) { File fl = new
+ * File(file); pdbfn = fl.getName(); } else if (protocol ==
+ * jalview.io.FormatAdapter.URL) { URL url = new URL(file); pdbfn =
+ * url.getFile(); } } catch (Exception e) { } ; if (assocSeq == null)
+ * { SequenceIdMatcher idm = new SequenceIdMatcher(viewport
+ * .getAlignment().getSequencesArray()); if (pdbfn.length() > 0) { //
+ * attempt to find a match in the alignment SequenceI mtch =
+ * idm.findIdMatch(pdbfn); int l = 0, c = pdbfn.indexOf("."); while
+ * (mtch == null && c != -1) { while ((c = pdbfn.indexOf(".", l)) > l)
+ * { l = c; } if (l > -1) { pdbfn = pdbfn.substring(0, l); } mtch =
+ * idm.findIdMatch(pdbfn); } if (mtch != null) { // try and associate
+ * // prompt ? PDBEntry pe = new AssociatePdbFileWithSeq()
+ * .associatePdbWithSeq(file, protocol, mtch, true); if (pe != null) {
+ * System.err.println("Associated file : " + file + " with " +
+ * mtch.getDisplayId(true)); alignPanel.paintAlignment(true); } } //
+ * TODO: maybe need to load as normal otherwise return; } }
+ */
// try to parse it as a features file
boolean isGroupsFile = parseFeaturesFile(file, protocol);
// if it wasn't a features file then we just treat it as a general