1 2 15 package org.wings.recorder; 16 17 import org.apache.commons.httpclient.HttpClient; 18 import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; 19 import org.apache.commons.httpclient.NameValuePair; 20 import org.apache.commons.httpclient.methods.GetMethod; 21 import org.apache.commons.httpclient.methods.PostMethod; 22 23 import java.io.IOException ; 24 import java.util.Iterator ; 25 import java.util.List ; 26 27 30 public abstract class Script { 31 private HttpClient client; 32 private float delay = 1.0f; 33 private String url; 34 35 public Script() { 36 client = new HttpClient(new MultiThreadedHttpConnectionManager()); 37 } 38 39 public void setDelay(float delay) { this.delay = delay; } 40 41 public void setTimeout(int timeout) { client.setConnectionTimeout(timeout); } 42 43 public void setUrl(String url) { 44 if (url.endsWith("/")) 45 this.url = url; 46 else 47 this.url = url + "/"; 48 } 49 50 public void delay(long time) { 51 if (delay > 0.0) { 52 try { 53 Thread.sleep((long) (time * delay)); 54 } catch (InterruptedException e) { } 55 } 56 } 57 58 public String send(GET request) throws IOException { 59 GetMethod get = new GetMethod(url + request.getResource()); 60 addHeaders(request, get); 61 62 NameValuePair[] nvps = eventsAsNameValuePairs(request); 63 get.setQueryString(nvps); 64 65 int result = client.executeMethod(get); 66 return get.getResponseBodyAsString(); 67 } 68 69 public String send(POST request) throws IOException { 70 PostMethod post = new PostMethod(url + request.getResource()); 71 addHeaders(request, post); 72 73 NameValuePair[] nvps = eventsAsNameValuePairs(request); 74 post.setRequestBody(nvps); 75 76 int result = client.executeMethod(post); 77 return post.getResponseBodyAsString(); 78 } 79 80 private void addHeaders(Request request, GetMethod post) { 81 List headers = request.getHeaders(); 82 for (Iterator iterator = headers.iterator(); iterator.hasNext();) { 83 Request.Header header = (Request.Header) iterator.next(); 84 post.addRequestHeader(header.getName(), header.getValue()); 85 } 86 } 87 88 private NameValuePair[] eventsAsNameValuePairs(Request request) { 89 List events = request.getEvents(); 90 int size = 0; 91 for (Iterator iterator = events.iterator(); iterator.hasNext();) { 92 Request.Event event = (Request.Event) iterator.next(); 93 size += event.getValues().length; 94 } 95 96 NameValuePair[] nvps = new NameValuePair[size]; 97 int index = 0; 98 for (Iterator iterator = events.iterator(); iterator.hasNext();) { 99 Request.Event event = (Request.Event) iterator.next(); 100 String [] values = event.getValues(); 101 for (int i = 0; i < values.length; i++) { 102 String value = values[i]; 103 nvps[index++] = new NameValuePair(event.getName(), value); 104 } 105 } 106 return nvps; 107 } 108 109 public abstract void execute() throws Exception ; 110 111 public static void main(String [] args) throws Exception { 112 String name = args[0]; 113 String url = args[1]; 114 float delay = args.length == 3 ? Float.parseFloat(args[2]) : 1.0f; 115 116 Class clazz = Class.forName(name); 117 Script script = (Script) clazz.newInstance(); 118 script.setUrl(url); 119 script.setDelay(delay); 120 script.execute(); 121 } 122 } 123 | Popular Tags |