4 * <p>Title: JalviewX</p>
5 * <p>Description: Jalview Re-engineered</p>
6 * <p>Copyright: Copyright (c) 2004</p>
7 * <p>Company: Dundee University</p>
8 * @author not attributable
10 * Commenced 14th January 2005, Jim Procter
11 * Contains and depends on GPL-2 jemboss classes
12 * see http://www.rfcgr.mrc.ac.uk/Software/EMBOSS/Jemboss/index.html
17 * Jemboss webservices are implemented here as re-entrant synchronous SOAP
18 * exchanges. It is up to the user of the class whether these exchanges
19 * are executed in their own thread to effect background processing
23 * Standardise the exceptions (currently errors are output on stdout)
24 * Allow server configuration
25 * Throw away JembossParams and Jemboss dependence
26 * Generalise results to return collections of objects - alignments, trees, annotations, etc.
30 import java.security.*;
34 import ext.jemboss.soap.*;
35 import jalview.datamodel.*;
41 private static ext.jemboss.JembossParams vamsas_server;
45 // Set up default jalview-jemboss server properties
47 vamsas_server = new JembossParams();
48 vamsas_server.setCurrentMode("interactive");
49 System.out.println("Jemboss Server Init\n"
50 + vamsas_server.serverDescription()
51 + "\nUser Authorisation ? "
52 + vamsas_server.getUseAuth()
56 /* public void updateServer(JembossParams props)
58 vamsas_server.updateJembossPropStrings (
59 props.getEmbossEnvironmentArray());
62 public SequenceI[] clustalW(SequenceI[] sequences) {
63 // Does the same as below but keeps initial sequence order.
64 return (this.clustalW(sequences, true));
66 public SequenceI[] clustalW(SequenceI[] sequences, boolean PreserveOrder)
69 // Simplest client call - with gumph from jemboss.server.TestPrivateServer
70 if (vamsas_server.getPublicSoapURL().startsWith("https"))
73 // System.setProperty ("javax.net.debug", "all");
74 com.sun.net.ssl.internal.ssl.Provider p =
75 new com.sun.net.ssl.internal.ssl.Provider();
76 Security.addProvider(p);
78 //have to do it this way to work with JNLP
79 URL.setURLStreamHandlerFactory( new URLStreamHandlerFactory()
81 public URLStreamHandler createURLStreamHandler(final String protocol)
83 if(protocol != null && protocol.compareTo("https") == 0)
85 return new com.sun.net.ssl.internal.www.protocol.https.Handler();
91 //location of keystore
92 System.setProperty("javax.net.ssl.trustStore",
93 "resources/client.keystore");
95 String jembossClientKeyStore = System.getProperty("user.home") +
96 "/.jembossClientKeystore";
100 new JembossJarUtil("resources/client.jar").writeByteFile(
101 "client.keystore",jembossClientKeyStore);
102 System.setProperty("javax.net.ssl.trustStore",
103 jembossClientKeyStore);
105 catch(Exception exp){}
109 Hashtable filesToMove = new Hashtable();
110 String embossCommand = "emma -sequence jalseqs.fasta -auto";
112 SequenceI[] myseq = new SequenceI[sequences.length];
113 for (int i=0; i<sequences.length; i++) {
114 myseq[i] = new Sequence(sequences[i]);
117 Hashtable namemap = jalview.analysis.SeqsetUtils.uniquify(myseq);
118 // Load sequence file into hash
120 filesToMove.put("jalseqs.fasta",
121 jalview.io.FastaFile.print(myseq,124,false, false).getBytes());
123 if(vamsas_server.getUseAuth() == true)
124 if(vamsas_server.getServiceUserName() == null)
125 System.out.println("jalview.Jemboss: OOPS! Authentication required!");
127 // submit to private server
130 JembossRun thisrun = new JembossRun(embossCommand,"",
131 filesToMove,vamsas_server);
132 Hashtable h = thisrun.hash();
133 Enumeration enumerator = h.keys();
134 // Find the alignment generated and parse it
135 while (enumerator.hasMoreElements())
137 String thiskey = (String)enumerator.nextElement().toString();
138 if (thiskey.endsWith(".aln"))
140 // FormatAdapter, and IdentifyFile use a protocol string
141 // to work out what 'file' is - file/url/Alignmentasastring
142 String alfile = h.get(thiskey).toString();
143 String format = IdentifyFile.Identify(alfile, "Paste");
144 SequenceI[] alignment = null;
146 if (FormatAdapter.formats.contains(format))
147 alignment = FormatAdapter.readFile(alfile, "Paste", format);
149 System.out.println("jalview.Jemboss: Unknown format "+format+"\n");
150 if (alignment == null)
151 System.out.println("jalview.Jemboss: Couldn't read response:\n"
152 + alfile + "\n---EOF\n");
155 jalview.analysis.AlignmentSorter.recoverOrder(alignment);
157 if (!jalview.analysis.SeqsetUtils.deuniquify(namemap, alignment)) {
158 System.out.println("jalview.Jemboss: Warning: Some of the "
159 +"original sequence names have not been recovered!\n");
168 catch (JembossSoapException eae)
170 System.out.println("jalview.Jemboss: SOAP ERROR :"+embossCommand
173 catch (Exception e) {
174 System.out.println("jalview.Jemboss: Some other failure :\n"
175 +e.getMessage()+"\n");