org.wings.recorder.Script Maven / Gradle / Ivy
The newest version!
/*
* Copyright 2000,2005 wingS development team.
*
* This file is part of wingS (http://wingsframework.org).
*
* wingS is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1
* of the License, or (at your option) any later version.
*
* Please see COPYING for the complete licence.
*/
package org.wings.recorder;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
/**
* @author hengels
*/
public abstract class Script {
private CloseableHttpClient client;
private float delay = 1.0f;
private String url;
private int timeout;
public Script() {
client = HttpClients.createDefault();
}
public void setDelay(float delay) { this.delay = delay; }
public void setTimeout(int timeout) { this.timeout = timeout; }
public void setUrl(String url) {
if (url.endsWith("/"))
this.url = url;
else
this.url = url + '/';
}
public void delay(long time) {
if (delay > 0.0) {
try {
Thread.sleep((long) (time * delay));
} catch (InterruptedException e) { /* shit happens */ }
}
}
public String send(GET request) throws IOException {
List nvps = eventsAsNameValuePairs(request);
URI uri;
try {
uri = new URIBuilder(url + request.getResource()).addParameters(nvps).build();
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
HttpGet get = new HttpGet(uri);
addHeaders(request, get);
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(timeout).build();
get.setConfig(requestConfig);
try (CloseableHttpResponse result = client.execute(get)) {
return EntityUtils.toString(result.getEntity());
}
}
public String send(POST request) throws IOException {
HttpPost post = new HttpPost(url + request.getResource());
addHeaders(request, post);
List nvps = eventsAsNameValuePairs(request);
post.setEntity(new UrlEncodedFormEntity(nvps));
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(timeout).build();
post.setConfig(requestConfig);
try (CloseableHttpResponse result = client.execute(post)) {
return EntityUtils.toString(result.getEntity());
}
}
private static void addHeaders(Request request, HttpRequestBase post) {
List headers = request.getHeaders();
for (Object header1 : headers) {
Request.Header header = (Request.Header) header1;
post.addHeader(header.getName(), header.getValue());
}
}
private static List eventsAsNameValuePairs(Request request) {
List events = request.getEvents();
int size = 0;
for (Object event2 : events) {
Request.Event event = (Request.Event) event2;
size += event.getValues().length;
}
List nvps = new ArrayList<>(size);
for (Object event1 : events) {
Request.Event event = (Request.Event) event1;
String[] values = event.getValues();
for (String value : values) {
nvps.add(new BasicNameValuePair(event.getName(), value));
}
}
return nvps;
}
public abstract void execute();
public static void main(String... args) throws Exception {
String name = args[0];
String url = args[1];
float delay = args.length == 3 ? Float.parseFloat(args[2]) : 1.0f;
Class clazz = Class.forName(name);
Script script = (Script) clazz.newInstance();
script.setUrl(url);
script.delay = delay;
script.execute();
}
}