You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2008/10/31 18:16:08 UTC
svn commit: r709485 - in
/httpcomponents/httpclient/trunk/module-httpmime/src:
main/java/org/apache/http/entity/mime/content/
test/java/org/apache/http/entity/mime/
Author: olegk
Date: Fri Oct 31 10:16:08 2008
New Revision: 709485
URL: http://svn.apache.org/viewvc?rev=709485&view=rev
Log:
HTTPCLIENT-807: Added means to set mime type on default ContentBody implementations
Added:
httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/AbstractContentBody.java
httpcomponents/httpclient/trunk/module-httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartContentBody.java
Modified:
httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/FileBody.java
httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/InputStreamBody.java
httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/StringBody.java
Added: httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/AbstractContentBody.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/AbstractContentBody.java?rev=709485&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/AbstractContentBody.java (added)
+++ httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/AbstractContentBody.java Fri Oct 31 10:16:08 2008
@@ -0,0 +1,77 @@
+/*
+ * $HeadURL:$
+ * $Revision:$
+ * $Date:$
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.entity.mime.content;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.apache.james.mime4j.message.AbstractBody;
+
+public abstract class AbstractContentBody extends AbstractBody implements ContentBody {
+
+ private final String mimeType;
+ private final String mediaType;
+ private final String subType;
+
+ public AbstractContentBody(final String mimeType) {
+ super();
+ if (mimeType == null) {
+ throw new IllegalArgumentException("MIME type may not be null");
+ }
+ this.mimeType = mimeType;
+ int i = mimeType.indexOf('/');
+ if (i != -1) {
+ this.mediaType = mimeType.substring(0, i);
+ this.subType = mimeType.substring(i + 1);
+ } else {
+ this.mediaType = mimeType;
+ this.subType = null;
+ }
+ }
+
+ public String getMimeType() {
+ return this.mimeType;
+ }
+
+ public String getMediaType() {
+ return this.mediaType;
+ }
+
+ public String getSubType() {
+ return this.subType;
+ }
+
+ public Map<?, ?> getContentTypeParameters() {
+ return Collections.EMPTY_MAP;
+ }
+
+}
Modified: httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/FileBody.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/FileBody.java?rev=709485&r1=709484&r2=709485&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/FileBody.java (original)
+++ httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/FileBody.java Fri Oct 31 10:16:08 2008
@@ -36,25 +36,26 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.util.Collections;
-import java.util.Map;
import org.apache.http.entity.mime.MIME;
-import org.apache.james.mime4j.message.AbstractBody;
import org.apache.james.mime4j.message.BinaryBody;
-public class FileBody extends AbstractBody implements BinaryBody, ContentBody {
+public class FileBody extends AbstractContentBody implements BinaryBody {
private final File file;
- public FileBody(final File file) {
- super();
+ public FileBody(final File file, final String mimeType) {
+ super(mimeType);
if (file == null) {
throw new IllegalArgumentException("File may not be null");
}
this.file = file;
}
+ public FileBody(final File file) {
+ this(file, "application/octet-stream");
+ }
+
public InputStream getInputStream() throws IOException {
return new FileInputStream(this.file);
}
@@ -84,22 +85,6 @@
return null;
}
- public String getMimeType() {
- return "application/octet-stream";
- }
-
- public Map<?, ?> getContentTypeParameters() {
- return Collections.EMPTY_MAP;
- }
-
- public String getMediaType() {
- return "application";
- }
-
- public String getSubType() {
- return "octet-stream";
- }
-
public long getContentLength() {
return this.file.length();
}
Modified: httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/InputStreamBody.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/InputStreamBody.java?rev=709485&r1=709484&r2=709485&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/InputStreamBody.java (original)
+++ httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/InputStreamBody.java Fri Oct 31 10:16:08 2008
@@ -34,20 +34,17 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.util.Collections;
-import java.util.Map;
import org.apache.http.entity.mime.MIME;
-import org.apache.james.mime4j.message.AbstractBody;
import org.apache.james.mime4j.message.BinaryBody;
-public class InputStreamBody extends AbstractBody implements BinaryBody, ContentBody {
+public class InputStreamBody extends AbstractContentBody implements BinaryBody {
private final InputStream in;
private final String filename;
- public InputStreamBody(final InputStream in, final String filename) {
- super();
+ public InputStreamBody(final InputStream in, final String mimeType, final String filename) {
+ super(mimeType);
if (in == null) {
throw new IllegalArgumentException("Input stream may not be null");
}
@@ -55,6 +52,10 @@
this.filename = filename;
}
+ public InputStreamBody(final InputStream in, final String filename) {
+ this(in, "application/octet-stream", filename);
+ }
+
public InputStream getInputStream() throws IOException {
return this.in;
}
@@ -83,22 +84,6 @@
return null;
}
- public String getMimeType() {
- return "application/octet-stream";
- }
-
- public Map<?, ?> getContentTypeParameters() {
- return Collections.EMPTY_MAP;
- }
-
- public String getMediaType() {
- return "application";
- }
-
- public String getSubType() {
- return "octet-stream";
- }
-
public long getContentLength() {
return -1;
}
Modified: httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/StringBody.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/StringBody.java?rev=709485&r1=709484&r2=709485&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/StringBody.java (original)
+++ httpcomponents/httpclient/trunk/module-httpmime/src/main/java/org/apache/http/entity/mime/content/StringBody.java Fri Oct 31 10:16:08 2008
@@ -43,16 +43,18 @@
import java.util.Map;
import org.apache.http.entity.mime.MIME;
-import org.apache.james.mime4j.message.AbstractBody;
import org.apache.james.mime4j.message.TextBody;
-public class StringBody extends AbstractBody implements TextBody, ContentBody {
+public class StringBody extends AbstractContentBody implements TextBody {
private final byte[] content;
private final Charset charset;
- public StringBody(final String text, Charset charset) throws UnsupportedEncodingException {
- super();
+ public StringBody(
+ final String text,
+ final String mimeType,
+ Charset charset) throws UnsupportedEncodingException {
+ super(mimeType);
if (text == null) {
throw new IllegalArgumentException("Text may not be null");
}
@@ -63,8 +65,12 @@
this.charset = charset;
}
+ public StringBody(final String text, Charset charset) throws UnsupportedEncodingException {
+ this(text, "text/plain", charset);
+ }
+
public StringBody(final String text) throws UnsupportedEncodingException {
- this(text, null);
+ this(text, "text/plain", null);
}
public Reader getReader() throws IOException {
@@ -94,18 +100,7 @@
return this.charset.name();
}
- public String getMimeType() {
- return "text/plain";
- }
-
- public String getMediaType() {
- return "text";
- }
-
- public String getSubType() {
- return "plain";
- }
-
+ @Override
public Map<?, ?> getContentTypeParameters() {
Map<Object, Object> map = new HashMap<Object, Object>();
map.put("charset", this.charset.name());
Added: httpcomponents/httpclient/trunk/module-httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartContentBody.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartContentBody.java?rev=709485&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/module-httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartContentBody.java (added)
+++ httpcomponents/httpclient/trunk/module-httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartContentBody.java Fri Oct 31 10:16:08 2008
@@ -0,0 +1,117 @@
+/*
+ * $HeadURL:$
+ * $Revision:$
+ * $Date:$
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.entity.mime;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.nio.charset.Charset;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.apache.http.entity.mime.content.InputStreamBody;
+import org.apache.http.entity.mime.content.StringBody;
+
+public class TestMultipartContentBody extends TestCase {
+
+ // ------------------------------------------------------------ Constructor
+ public TestMultipartContentBody(final String testName) throws IOException {
+ super(testName);
+ }
+
+ // ------------------------------------------------------------------- Main
+ public static void main(String args[]) {
+ String[] testCaseName = { TestMultipartContentBody.class.getName() };
+ junit.textui.TestRunner.main(testCaseName);
+ }
+
+ // ------------------------------------------------------- TestCase Methods
+
+ public static Test suite() {
+ return new TestSuite(TestMultipartContentBody.class);
+ }
+
+ public void testStringBody() throws Exception {
+ StringBody b1 = new StringBody("text");
+ assertEquals(4, b1.getContentLength());
+
+ Charset defCharset = Charset.defaultCharset();
+
+ assertEquals(defCharset.name(), b1.getCharset());
+ assertEquals(defCharset.name(), b1.getContentTypeParameters().get("charset"));
+
+ assertNull(b1.getFilename());
+ assertEquals("text/plain", b1.getMimeType());
+ assertEquals("text", b1.getMediaType());
+ assertEquals("plain", b1.getSubType());
+
+ assertEquals(MIME.ENC_8BIT, b1.getTransferEncoding());
+
+ StringBody b2 = new StringBody("more text", "text/other", MIME.DEFAULT_CHARSET);
+ assertEquals(9, b2.getContentLength());
+ assertEquals(MIME.DEFAULT_CHARSET.name(), b2.getCharset());
+ assertEquals(MIME.DEFAULT_CHARSET.name(), b2.getContentTypeParameters().get("charset"));
+
+ assertNull(b2.getFilename());
+ assertEquals("text/other", b2.getMimeType());
+ assertEquals("text", b2.getMediaType());
+ assertEquals("other", b2.getSubType());
+
+ assertEquals(MIME.ENC_8BIT, b2.getTransferEncoding());
+ }
+
+ public void testInputStreamBody() throws Exception {
+ byte[] stuff = "Stuff".getBytes("US-ASCII");
+ InputStreamBody b1 = new InputStreamBody(new ByteArrayInputStream(stuff), "stuff");
+ assertEquals(-1, b1.getContentLength());
+
+ assertNull(b1.getCharset());
+ assertEquals("stuff", b1.getFilename());
+ assertEquals("application/octet-stream", b1.getMimeType());
+ assertEquals("application", b1.getMediaType());
+ assertEquals("octet-stream", b1.getSubType());
+
+ assertEquals(MIME.ENC_BINARY, b1.getTransferEncoding());
+
+ InputStreamBody b2 = new InputStreamBody(
+ new ByteArrayInputStream(stuff), "some/stuff", "stuff");
+ assertEquals(-1, b2.getContentLength());
+ assertNull(b2.getCharset());
+ assertEquals("stuff", b2.getFilename());
+ assertEquals("some/stuff", b2.getMimeType());
+ assertEquals("some", b2.getMediaType());
+ assertEquals("stuff", b2.getSubType());
+
+ assertEquals(MIME.ENC_BINARY, b2.getTransferEncoding());
+ }
+}