All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy