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

com.blazebit.quartz.job.http.AbstractHttpInvokerJob Maven / Gradle / Ivy

There is a newer version: 0.1.14
Show newest version
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.blazebit.quartz.job.http;

import com.blazebit.quartz.job.AbstractJob;
import com.blazebit.quartz.job.JobParameter;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
 * 
 * @author Christian Beikov
 * @since 0.1.2
 */
public abstract class AbstractHttpInvokerJob extends AbstractJob {

	private static final long serialVersionUID = 1L;

	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		JobDataMap map = context.getMergedJobDataMap();
		String url = getRequiredParam(map, "url");
		String urlSuffix = getOptionalParam(map, "urlSuffix");
		String parameterEncoding = "UTF-8";
		StringBuilder urlBuilder = new StringBuilder(url);

		if (urlSuffix != null) {
			if (!url.endsWith("/") && !urlSuffix.startsWith("/")) {
				urlBuilder.append("/");
			}

			urlBuilder.append(urlSuffix);
		}

		URLConnection con = null;
		InputStream is = null;

		try {

			/*
			 * Build up the post parameter string for the request Only use
			 * parameters that are not explicitly defined for this job
			 */
			StringBuilder data = new StringBuilder();

			for (Map.Entry entry : getUndefinedParameters(map)
					.entrySet()) {
				if (data.length() != 0) {
					data.append("&");
				}

				data.append(URLEncoder.encode(entry.getKey(), parameterEncoding));
				data.append("=");
				data.append(URLEncoder.encode(entry.getValue().toString(),
						parameterEncoding));
			}

			con = createConnection(urlBuilder.toString(), data.toString());

			/*
			 * Read the response from the request
			 */

			con.connect();
			is = con.getInputStream();

			/*
			 * Handle the response of the request, default is print to
			 * System.out
			 */

			handleResponse(is);
		} catch (MalformedURLException ex) {
			throw new JobExecutionException("Invalid URL given", ex, false);
		} catch (FileNotFoundException ex) {
			throw new JobExecutionException("URL can not be reached", ex, false);
		} catch (IOException ex) {
			throw new JobExecutionException(
					"Error occured during the invocation of the URL", ex, false);
		} finally {
			if (is != null) {
				try {
					is.close();
				} catch (IOException ex) {
					// Ignore
				}
			}
		}
	}

	@Override
	public List getParameters() {
		List params = new ArrayList(
				super.getParameters());
		params.add(new JobParameter("url", true, String.class));
		params.add(new JobParameter("urlSuffix", false, String.class));
		return params;
	}

	protected abstract URLConnection createConnection(String url,
			String parameterString) throws IOException;

	protected void handleResponse(InputStream is) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(is));
		String line = null;

		while ((line = br.readLine()) != null) {
			System.out.println(line);
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy