From cc7e10fb45c94da9549aef2b3ebf7b53eecb5dba Mon Sep 17 00:00:00 2001 From: josch Date: Thu, 10 Feb 2011 09:33:45 +0100 Subject: [PATCH] add commons --- .../informatik/hets/common/io/IOUtils.java | 48 +++++++++++++ .../hets/common/net/HttpPostMultipart.java | 71 +++++++++++++++++++ .../hets/common/net/HttpPostUrlencoded.java | 55 ++++++++++++++ .../informatik/hets/common/xml/Dom.java | 57 +++++++++++++++ 4 files changed, 231 insertions(+) create mode 100644 src/de/unibremen/informatik/hets/common/io/IOUtils.java create mode 100644 src/de/unibremen/informatik/hets/common/net/HttpPostMultipart.java create mode 100644 src/de/unibremen/informatik/hets/common/net/HttpPostUrlencoded.java create mode 100644 src/de/unibremen/informatik/hets/common/xml/Dom.java diff --git a/src/de/unibremen/informatik/hets/common/io/IOUtils.java b/src/de/unibremen/informatik/hets/common/io/IOUtils.java new file mode 100644 index 0000000..5f240e7 --- /dev/null +++ b/src/de/unibremen/informatik/hets/common/io/IOUtils.java @@ -0,0 +1,48 @@ +package de.unibremen.informatik.hets.common.io + +public class IOUtils { + private static final int DEFAULT_BUFFER_SIZE = 1024 * 4; + + static { + } + + public IOUtils() { + super(); + } + + public static long copy(InputStream in, OutputStream out) throws IOException { + byte[] buf = new byte[DEFAULT_BUFFER_SIZE]; + int nread = 0; + long count = 0; + while((nread = in.read(buf)) >= 0) { + out.write(buf, 0, nread); + count += nread; + } + return count; + } + + public static long copy(Reader in, Writer out) throws IOException { + char[] buf = new char[DEFAULT_BUFFER_SIZE]; + int nread = 0; + long count = 0; + while((nread = in.read(buf)) >= 0) { + out.write(buf, 0, nread); + count += nread; + } + return count; + } + + public static StringWriter getStringWriter(InputStream in) throws IOException { + StringWriter sw = new StringWriter(); + copy(new InputStreamReader(in), sw); + return sw; + } + + public static String getString(InputStream in) throws IOException { + return getStringWriter(in).toString(); + } + + public static StringBuffer getBuffer(InputStream in) throws IOException { + return getStringWriter(in).getBuffer(); + } +} diff --git a/src/de/unibremen/informatik/hets/common/net/HttpPostMultipart.java b/src/de/unibremen/informatik/hets/common/net/HttpPostMultipart.java new file mode 100644 index 0000000..e4f4bf4 --- /dev/null +++ b/src/de/unibremen/informatik/hets/common/net/HttpPostMultipart.java @@ -0,0 +1,71 @@ +package de.unibremen.informatik.hets.common.net; + +import java.net.URLConnection; +import java.net.URL; +import java.util.Map; +import java.util.Iterator; +import java.util.Random; +import java.io.IOException; +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.FileInputStream; + +public class HttpPostMultipart { + URLConnection connection; + OutputStream os = null; + String boundary = "---------------------------" + randomString() + randomString() + randomString(); + private static Random random = new Random(); + + protected void write(String s) throws IOException { + os.write(s.getBytes()); + } + + protected static String randomString() { + return Long.toString(random.nextLong(), 36); + } + + public HttpPostMultipart(URL url) throws IOException { + connection = url.openConnection(); + connection.setDoOutput(true); + connection.setRequestProperty("Content-Type", + "multipart/form-data; boundary=" + boundary); + os = connection.getOutputStream(); + } + + public InputStream post(Map parameters) throws IOException { + String name; + Object object; + if (parameters != null) { + for (Iterator i = parameters.entrySet().iterator(); i.hasNext();) { + Map.Entry entry = (Map.Entry)i.next(); + name = entry.getKey().toString(); + object = entry.getValue(); + + write("--" + boundary + "\r\n"); + write("Content-Disposition: form-data; name=\"" + name + "\""); + if (object instanceof File) { + write("; filename=\"" + ((File)object).getPath() + "\"\r\n"); + String type = connection.guessContentTypeFromName(((File)object).getPath()); + if (type == null) + type = "application/octet-stream"; + write("Content-Type: " + type + "\r\n"); + write("\r\n"); + pipe(new FileInputStream((File)object), os); + } else { + write("\r\n"); + write("\r\n"); + write(object.toString()); + } + write("\r\n"); + } + } + write("--" + boundary + "--\r\n"); + os.close(); + return connection.getInputStream(); + } + + public static InputStream post(URL url, Map parameters) throws IOException { + return new HttpPostMultipart(url).post(parameters); + } +} diff --git a/src/de/unibremen/informatik/hets/common/net/HttpPostUrlencoded.java b/src/de/unibremen/informatik/hets/common/net/HttpPostUrlencoded.java new file mode 100644 index 0000000..72f9243 --- /dev/null +++ b/src/de/unibremen/informatik/hets/common/net/HttpPostUrlencoded.java @@ -0,0 +1,55 @@ +package de.unibremen.informatik.hets.common.net; + +import java.net.URLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.util.Map; +import java.util.Iterator; +import java.io.IOException; +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.FileInputStream; + +public class HttpPostUrlencoded { + URLConnection connection; + OutputStream os = null; + + protected void write(String s) throws IOException { + os.write(s.getBytes()); + } + + public HttpPostUrlencoded(URL url) throws IOException { + connection = url.openConnection(); + connection.setDoOutput(true); + connection.setRequestProperty("Content-Type", + "application/x-www-form-urlencoded"); + os = connection.getOutputStream(); + } + + public InputStream post(Map parameters) throws IOException { + String name; + Object object; + if (parameters != null) { + for (Iterator i = parameters.entrySet().iterator(); i.hasNext();) { + Map.Entry entry = (Map.Entry)i.next(); + name = entry.getKey().toString(); + object = entry.getValue(); + + write(name + "="); + if (object instanceof File) { + write(URLEncoder.encode(InputStreamToString(new FileInputStream((File)object)), "UTF-8")); + } else { + write(object.toString()); + } + write("&"); + } + } + os.close(); + return connection.getInputStream(); + } + + public static InputStream post(URL url, Map parameters) throws IOException { + return new HttpPostUrlencoded(url).post(parameters); + } +} diff --git a/src/de/unibremen/informatik/hets/common/xml/Dom.java b/src/de/unibremen/informatik/hets/common/xml/Dom.java new file mode 100644 index 0000000..d5102d1 --- /dev/null +++ b/src/de/unibremen/informatik/hets/common/xml/Dom.java @@ -0,0 +1,57 @@ +package de.unibremen.informatik.hets.common.xml + +public class Dom { + static { + } + + public Dom() { + super(); + } + + public static String getTextContent(Element item) { + StringBuilder sb = new StringBuilder(); + NodeList list = ((Node)item).getChildNodes(); + for (int i = 0; i < list.getLength(); i++) { + Node child = list.item(i); + if (child.getNodeType() == Node.TEXT_NODE) { + sb.append(child.getNodeValue()); + } + } + return sb.toString(); + } + + public static Element getFirstChildElement(Element item) { + return getFirstChildElement((Node)item); + } + + public static Element getFirstChildElement(Node item) { + NodeList list = item.getChildNodes(); + for (int i = 0; i < list.getLength(); i++) { + Node child = list.item(i); + if (child.getNodeType() == Node.ELEMENT_NODE) { + return (Element)child; + } + } + return null; + } + + public static Node getFirstChild(Node item, String name) { + NodeList list = item.getChildNodes(); + for (int i = 0; i < list.getLength(); i++) { + if (list.item(i).getNodeName() == name) { + return list.item(i); + } + } + return null; + } + + public static boolean hasChildNode(Node item, String name) { + NodeList list = item.getChildNodes(); + for (int i = 0; i < list.getLength(); i++) { + if (list.item(i).getNodeName() == name) { + return true; + } + } + return false; + } +}