Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/tax/TaxClient.java @ 68:5028fdace37b
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 16:23:26 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 68:5028fdace37b |
---|---|
1 package tax; | |
2 | |
3 import java.io.PrintStream; | |
4 import java.util.ArrayList; | |
5 | |
6 import server.PercentEncoding; | |
7 import server.ServerTools; | |
8 import shared.Parse; | |
9 import shared.PreParser; | |
10 import shared.Shared; | |
11 import shared.Timer; | |
12 import shared.Tools; | |
13 import structures.ByteBuilder; | |
14 import structures.StringNum; | |
15 | |
16 public class TaxClient { | |
17 | |
18 public static void main(String[] args){ | |
19 Timer t=new Timer(); | |
20 {//Preparse block for help, config files, and outstream | |
21 PreParser pp=new PreParser(args, null, false); | |
22 args=pp.args; | |
23 outstream=pp.outstream; | |
24 } | |
25 | |
26 ArrayList<Integer> gi=new ArrayList<Integer>(); | |
27 ArrayList<String> acc=new ArrayList<String>(); | |
28 ArrayList<String> name=new ArrayList<String>(); | |
29 ArrayList<String> header=new ArrayList<String>(); | |
30 | |
31 boolean slow=true; | |
32 | |
33 //Parse each argument | |
34 for(int i=0; i<args.length; i++){ | |
35 String arg=args[i]; | |
36 | |
37 //Break arguments into their constituent parts, in the form of "a=b" | |
38 String[] split=arg.split("="); | |
39 String a=split[0].toLowerCase(); | |
40 String b=split.length>1 ? split[1] : null; | |
41 | |
42 if(a.equals("verbose")){ | |
43 verbose=Parse.parseBoolean(b); | |
44 }else if(a.equals("name") || a.equals("names")){ | |
45 if(b!=null){ | |
46 for(String s : b.split(",")){ | |
47 name.add(s); | |
48 } | |
49 } | |
50 }else if(a.equals("gi")){ | |
51 if(b!=null){ | |
52 for(String s : b.split(",")){ | |
53 gi.add(Integer.parseInt(s)); | |
54 } | |
55 } | |
56 }else if(a.equals("accession")){ | |
57 if(b!=null){ | |
58 for(String s : b.split(",")){ | |
59 acc.add(s); | |
60 } | |
61 } | |
62 }else if(a.equals("header")){ | |
63 if(b!=null){ | |
64 for(String s : b.split(",")){ | |
65 header.add(s); | |
66 } | |
67 } | |
68 }else if(a.equals("slow")){ | |
69 slow=Parse.parseBoolean(b); | |
70 }else if(a.equals("fast")){ | |
71 slow=!Parse.parseBoolean(b); | |
72 }else if(a.equals("parse_flag_goes_here")){ | |
73 long fake_variable=Parse.parseKMG(b); | |
74 //Set a variable here | |
75 }else{ | |
76 outstream.println("Unknown parameter "+args[i]); | |
77 assert(false) : "Unknown parameter "+args[i]; | |
78 } | |
79 } | |
80 | |
81 if(slow){ | |
82 for(String s : name){ | |
83 outstream.println(s+"\t"+nameToTaxid(s)); | |
84 } | |
85 for(Integer s : gi){ | |
86 outstream.println(s+"\t"+giToTaxid(s)); | |
87 } | |
88 for(String s : acc){ | |
89 outstream.println(s+"\t"+accessionToTaxid(s)); | |
90 } | |
91 }else{ | |
92 if(name.size()>0){ | |
93 int[] ids=nameToTaxidArray(name); | |
94 for(int i=0; i<ids.length; i++){ | |
95 outstream.println(name.get(i)+"\t"+ids[i]); | |
96 } | |
97 } | |
98 if(gi.size()>0){ | |
99 int[] ids=giToTaxidArray(gi); | |
100 for(int i=0; i<ids.length; i++){ | |
101 outstream.println(gi.get(i)+"\t"+ids[i]); | |
102 } | |
103 } | |
104 if(acc.size()>0){ | |
105 int[] ids=accessionToTaxidArray(acc); | |
106 for(int i=0; i<ids.length; i++){ | |
107 outstream.println(acc.get(i)+"\t"+ids[i]); | |
108 } | |
109 } | |
110 } | |
111 | |
112 t.stopAndPrint(); | |
113 } | |
114 | |
115 public static int accessionToTaxid(String accession){ | |
116 String s=sendAndReceive("pt/accession/",accession); | |
117 if(s==null || s.length()<1 || !Tools.isDigitOrSign(s.charAt(0))){return -1;} | |
118 return Integer.parseInt(s); | |
119 } | |
120 | |
121 public static int accessionToTaxidSpecificServer(String path, String accession){ | |
122 String s=sendAndReceiveSpecificServer(path,"pt/accession/",accession); | |
123 if(s==null || s.length()<1 || !Tools.isDigitOrSign(s.charAt(0))){return -1;} | |
124 return Integer.parseInt(s); | |
125 } | |
126 | |
127 public static int giToTaxid(int gi){ | |
128 String s=sendAndReceive("pt/gi/",Integer.toString(gi)); | |
129 if(s==null || s.length()<1 || !Tools.isDigitOrSign(s.charAt(0))){return -1;} | |
130 return Integer.parseInt(s); | |
131 } | |
132 | |
133 public static int nameToTaxid(String name){ | |
134 String s=sendAndReceive("pt/name/",name.replace(' ', '_')); | |
135 if(s==null || s.length()<1 || !Tools.isDigitOrSign(s.charAt(0))){return -1;} | |
136 return Integer.parseInt(s); | |
137 } | |
138 | |
139 public static int headerToTaxid(String header){ | |
140 String s=sendAndReceive("pt/name/",header); | |
141 if(s==null || s.length()<1 || !Tools.isDigitOrSign(s.charAt(0))){return -1;} | |
142 return Integer.parseInt(s); | |
143 } | |
144 | |
145 | |
146 public static int[] accessionToTaxidArray(String accession){ | |
147 String s=sendAndReceive("pt/accession/",accession); | |
148 // System.err.println("Sent "+accession+"\nReceived "+s); | |
149 return splitOutput(s); | |
150 } | |
151 | |
152 public static int[] giToTaxidArray(String gi){ | |
153 String s=sendAndReceive("pt/gi/",gi); | |
154 return splitOutput(s); | |
155 } | |
156 | |
157 public static int[] nameToTaxidArray(String name){ | |
158 String s=sendAndReceive("pt/name/",name.replace(' ', '_')); | |
159 return splitOutput(s); | |
160 } | |
161 | |
162 public static int[] headerToTaxidArray(String header){ | |
163 String s=sendAndReceive("pt/header/",header); | |
164 return splitOutput(s); | |
165 } | |
166 | |
167 | |
168 public static int[] accessionToTaxidArray(ArrayList<String> accession){ | |
169 String s=sendAndReceive("pt/accession/",fuse(accession)); | |
170 return splitOutput(s); | |
171 } | |
172 | |
173 public static int[] giToTaxidArray(ArrayList<Integer> gi){ | |
174 String s=sendAndReceive("pt/gi/",fuse(gi)); | |
175 return splitOutput(s); | |
176 } | |
177 | |
178 public static int[] nameToTaxidArray(ArrayList<String> name){ | |
179 String s=sendAndReceive("pt/name/",fuse(name).replace(' ', '_')); | |
180 return splitOutput(s); | |
181 } | |
182 | |
183 public static int[] headerToTaxidArray(ArrayList<String> header){ | |
184 String s=sendAndReceive("pt/header/",fuse(header)); | |
185 return splitOutput(s); | |
186 } | |
187 | |
188 private static final int[] splitOutput(String s){ | |
189 if(s==null || s.length()<1 || !Tools.isDigitOrSign(s.charAt(0))){return null;} | |
190 String[] split=s.split(","); | |
191 int[] ret=new int[split.length]; | |
192 for(int i=0; i<split.length; i++){ | |
193 ret[i]=Integer.parseInt(split[i]); | |
194 } | |
195 return ret; | |
196 } | |
197 | |
198 private static final String sendAndReceive(String prefix, String message){ | |
199 String path=Shared.taxServer(); | |
200 return sendAndReceiveSpecificServer(path, prefix, message); | |
201 } | |
202 | |
203 private static final String sendAndReceiveSpecificServer(String path, String prefix, String message){ | |
204 String response=null; | |
205 for(int i=0, millis=200; i<12 && (response==null || response.length()==0); i++) { | |
206 if(i>0){ | |
207 System.err.println("Null response, retrying after "+millis+" ms."); | |
208 try { | |
209 Thread.sleep(millis); | |
210 } catch (InterruptedException e) { | |
211 e.printStackTrace(); | |
212 } | |
213 millis*=2; | |
214 } | |
215 response=sendAndReceiveOnceSpecificServer(path, prefix, message); | |
216 } | |
217 return response; | |
218 } | |
219 | |
220 private static String sendAndReceiveOnce(String prefix, String message){ | |
221 String path=Shared.taxServer(); | |
222 return sendAndReceiveOnceSpecificServer(path, prefix, message); | |
223 } | |
224 | |
225 private static String sendAndReceiveOnceSpecificServer(String path, String prefix, String message){ | |
226 final String response; | |
227 if(message.length()<2000){//NERSC Apache limit is around 8kb | |
228 message=prefix+PercentEncoding.symbolToCode(message); | |
229 ByteBuilder bb=ServerTools.readPage(path+message, false); | |
230 response=(bb==null ? null : bb.toString()); | |
231 // System.err.println("S&R1 send:\n"+path+message); | |
232 // System.err.println("S&R1 receive:\n"+response); | |
233 }else{ | |
234 StringNum sn=ServerTools.sendAndReceive((prefix+message).getBytes(), path+"$POST"); | |
235 response=sn.s; | |
236 // System.err.println("S&R2: "+message+"\n"+path+"$POST"); | |
237 } | |
238 return response; | |
239 } | |
240 | |
241 private static String fuse(ArrayList<?> list){ | |
242 if(list==null || list.size()<0){return null;} | |
243 StringBuilder sb=new StringBuilder(); | |
244 for(Object s : list){ | |
245 sb.append(s).append(','); | |
246 } | |
247 sb.setLength(sb.length()-1); | |
248 return sb.toString(); | |
249 } | |
250 | |
251 public static PrintStream outstream=System.err; | |
252 public static boolean verbose=false; | |
253 | |
254 } |