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 }