\r
import java.awt.*;\r
import java.awt.event.*;\r
+import jalview.appletgui.TreePanel;\r
\r
\r
/**\r
String file = "No file";\r
Button launcher = new Button("Start Jalview");\r
\r
- AlignFrame currentAlignFrame;\r
+ //The currentAlignFrame is static, it will change\r
+ //if and when the user selects a new window\r
+ static AlignFrame currentAlignFrame;\r
+\r
+ //This is the first frame to be displayed, and does not change\r
+ AlignFrame initialAlignFrame;\r
+\r
+ boolean embedded = false;\r
\r
\r
/**\r
\r
this.setBackground(new Color(r, g, b));\r
\r
+ file = getParameter("file");\r
\r
- param = getParameter("features");\r
- if(param!=null)\r
+ final JalviewLite applet = this;\r
+ if(getParameter("embedded")!=null\r
+ && getParameter("embedded").equalsIgnoreCase("true"))\r
{\r
- if(param.indexOf("://")==-1)\r
- param = getCodeBase() + param;\r
+ embedded = true;\r
+ LoadingThread loader = new LoadingThread(file, applet);\r
+ loader.start();\r
}\r
- final String featuresFile = param;\r
-\r
- file = getParameter("file");\r
- final JalviewLite applet = this;\r
- if (file != null)\r
+ else if (file != null)\r
{\r
add(launcher);\r
- if(file.indexOf("://")==-1)\r
- file = getCodeBase() + file;\r
\r
launcher.addActionListener(new java.awt.event.ActionListener()\r
{\r
public void actionPerformed(ActionEvent e)\r
{\r
- String format = jalview.io.IdentifyFile.Identify(file,\r
- "URL");\r
LoadingThread loader = new LoadingThread(file,\r
- "URL",\r
- format,\r
- featuresFile,\r
applet);\r
loader.start();\r
}\r
System.exit(1);\r
}\r
\r
- String format = jalview.io.IdentifyFile.Identify(args[0],"File");\r
- SequenceI[] sequences = new AppletFormatAdapter().readFile(args[0], "File", format);\r
+ String format = new jalview.io.IdentifyFile().Identify(args[0],AppletFormatAdapter.FILE);\r
\r
+ SequenceI[] sequences = null;\r
+ try{\r
+ sequences = new AppletFormatAdapter().readFile(args[0], AppletFormatAdapter.FILE, format);\r
+ }catch(java.io.IOException ex)\r
+ {\r
+ ex.printStackTrace();\r
+ }\r
if ( (sequences != null) && (sequences.length > 0))\r
{\r
- AlignFrame af = new AlignFrame(new Alignment(sequences), null, args[0]);\r
+ AlignFrame af = new AlignFrame(new Alignment(sequences), null, args[0], false);\r
af.statusBar.setText("Successfully loaded file " + args[0]);\r
}\r
}\r
{\r
public void windowClosing(WindowEvent e)\r
{\r
+ if(currentAlignFrame == frame)\r
+ {\r
+ currentAlignFrame = null;\r
+ }\r
lastFrameX -=40;\r
- lastFrameY-=40;\r
+ lastFrameY -=40;\r
+ frame.setMenuBar(null);\r
frame.dispose();\r
}\r
+ public void windowActivated(WindowEvent e)\r
+ {\r
+ if(frame instanceof AlignFrame)\r
+ currentAlignFrame = (AlignFrame)frame;\r
+ }\r
+\r
});\r
frame.setVisible(true);\r
}\r
\r
+ public String getSelectedSequences()\r
+ {\r
+ StringBuffer result = new StringBuffer("");\r
+\r
+ if(initialAlignFrame.viewport.getSelectionGroup()!=null)\r
+ {\r
+ SequenceI[] seqs = initialAlignFrame.viewport.getSelectionGroup().\r
+ getSequencesInOrder(\r
+ initialAlignFrame.viewport.getAlignment());\r
+\r
+ for (int i = 0; i < seqs.length; i++)\r
+ result.append(seqs[i].getName() + "¬");\r
+ }\r
+\r
+ return result.toString();\r
+ }\r
+\r
public String getAlignment(String format)\r
{\r
return getAlignment(format, "true");\r
return reply;\r
}\r
catch (Exception ex)\r
- {ex.printStackTrace();\r
+ {\r
+ ex.printStackTrace();\r
return "Error retrieving alignment in " + format + " format. ";\r
-\r
}\r
}\r
\r
g.drawString("Jalview can't open file", 5, 15);\r
g.drawString("\"" + file + "\"", 5, 30);\r
}\r
+ else if(embedded)\r
+ {\r
+ g.setColor(Color.black);\r
+ g.setFont(new Font("Arial", Font.BOLD, 24));\r
+ g.drawString("Jalview Applet", 50, this.size().height/2 -30);\r
+ g.drawString("Loading Data...", 50, this.size().height/2);\r
+ }\r
+\r
+\r
}\r
\r
class LoadingThread extends Thread\r
String file;\r
String protocol;\r
String format;\r
- String featuresFile;\r
JalviewLite applet;\r
\r
- public LoadingThread(String file,\r
- String protocol,\r
- String format,\r
- String features,\r
- JalviewLite applet)\r
+ public LoadingThread(String _file,\r
+ JalviewLite _applet)\r
{\r
- this.file = file;\r
- this.protocol = protocol;\r
- this.format = format;\r
- featuresFile = features;\r
- this.applet = applet;\r
+ file = _file;\r
+ if(inArchive(file))\r
+ protocol = AppletFormatAdapter.CLASSLOADER;\r
+ else\r
+ {\r
+ file = addProtocol(file);\r
+ protocol = AppletFormatAdapter.URL;\r
+ }\r
+ format = new jalview.io.IdentifyFile().Identify(file, protocol);\r
+ applet = _applet;\r
}\r
\r
public void run()\r
{\r
SequenceI[] sequences = null;\r
- sequences = new AppletFormatAdapter().readFile(file, protocol, format);\r
-\r
+ try{\r
+ sequences = new AppletFormatAdapter().readFile(file, protocol,\r
+ format);\r
+ }catch(java.io.IOException ex)\r
+ {\r
+ ex.printStackTrace();\r
+ }\r
if ((sequences != null) && (sequences.length > 0))\r
{\r
- currentAlignFrame = new AlignFrame(new Alignment(sequences),\r
- applet, file);\r
- currentAlignFrame.statusBar.setText("Successfully loaded file " + file);\r
+ currentAlignFrame = new AlignFrame(new Alignment(sequences),\r
+ applet,\r
+ file,\r
+ embedded);\r
+\r
+ initialAlignFrame = currentAlignFrame;\r
+\r
+ currentAlignFrame.statusBar.setText("Successfully loaded file " + file);\r
+\r
+\r
+ String treeFile = applet.getParameter("treeFile");\r
+ if (treeFile != null)\r
+ {\r
+ try\r
+ {\r
+ if(inArchive(treeFile))\r
+ protocol = AppletFormatAdapter.CLASSLOADER;\r
+ else\r
+ {\r
+ protocol = AppletFormatAdapter.URL;\r
+ treeFile = addProtocol(treeFile);\r
+ }\r
+\r
+ jalview.io.NewickFile fin = new jalview.io.NewickFile(treeFile, protocol);\r
+\r
+ fin.parse();\r
+\r
+ if (fin.getTree() != null)\r
+ {\r
+ currentAlignFrame.loadTree(fin, treeFile);\r
+ }\r
+ }\r
+ catch (Exception ex)\r
+ {\r
+ ex.printStackTrace();\r
+ }\r
+ }\r
+\r
+ String param = getParameter("features");\r
+ if (param != null)\r
+ {\r
+ if( !inArchive(param) )\r
+ param = addProtocol( param );\r
+\r
+ currentAlignFrame.parseFeaturesFile(param);\r
+ }\r
+\r
+ param = getParameter("annotations");\r
+ if (param != null)\r
+ {\r
+ if( !inArchive(param) )\r
+ param = addProtocol( param );\r
+\r
+ new AnnotationReader().readAnnotationFile(\r
+ currentAlignFrame.viewport.getAlignment(),\r
+ param);\r
+\r
+ currentAlignFrame.alignPanel.fontChanged();\r
+ }\r
\r
- if(featuresFile!=null)\r
- currentAlignFrame.parseFeaturesFile(featuresFile);\r
\r
String pdbfile = applet.getParameter("PDBFILE");\r
if(pdbfile!=null)\r
{\r
- if(pdbfile.indexOf("://")==-1)\r
- pdbfile = getCodeBase() + pdbfile;\r
+ if( inArchive(pdbfile) )\r
+ protocol = AppletFormatAdapter.CLASSLOADER;\r
+ else\r
+ {\r
+ protocol = AppletFormatAdapter.URL;\r
+ pdbfile = addProtocol(pdbfile);\r
+ }\r
\r
String sequence = applet.getParameter("PDBSEQ");\r
\r
if(sequence!=null)\r
{\r
- new MCview.AppletPDBViewer(pdbfile, "URL",\r
+ new MCview.AppletPDBViewer(pdbfile, protocol,\r
(Sequence)currentAlignFrame.getAlignViewport().getAlignment().findName(sequence),\r
currentAlignFrame.getSeqcanvas());\r
-\r
-\r
}\r
\r
}\r
repaint();\r
}\r
}\r
+\r
+ /**\r
+ * Discovers whether the given file is in the Applet Archive\r
+ * @param file String\r
+ * @return boolean\r
+ */\r
+ boolean inArchive(String file)\r
+ {\r
+ //This might throw a security exception in certain browsers\r
+ //Netscape Communicator for instance.\r
+ try{\r
+ return (getClass().getResourceAsStream("/" + file) != null);\r
+ }catch(Exception ex)\r
+ {\r
+ System.out.println("Exception checking resources: "+file+" "+ex);\r
+ return false;\r
+ }\r
+ }\r
+\r
+ String addProtocol(String file)\r
+ {\r
+ if (file.indexOf("://") == -1)\r
+ file = getCodeBase() + file;\r
+\r
+ return file;\r
+ }\r
+\r
}\r
}\r