You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2007/04/02 19:18:02 UTC
svn commit: r524843 - in /incubator/abdera/java/trunk:
core/src/main/java/org/apache/abdera/model/
dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/
parser/src/main/java/org/apache/abdera/parser/stax/
parser/src/test/java/org/apache/abdera/tes...
Author: jmsnell
Date: Mon Apr 2 10:17:59 2007
New Revision: 524843
URL: http://svn.apache.org/viewvc?view=rev&rev=524843
Log:
New method setContent(InputStream) to make it easier to work with Base64 encoded binary content
New method getContentStream() makes it easier to get Base64 decoded binary content
Includes a test case
Added:
incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/InputStreamDataSource.java
Modified:
incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Entry.java
incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMEntry.java
incubator/abdera/java/trunk/parser/src/test/java/org/apache/abdera/test/parser/stax/FOMTest.java
Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Entry.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Entry.java?view=diff&rev=524843&r1=524842&r2=524843
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Entry.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Entry.java Mon Apr 2 10:17:59 2007
@@ -17,6 +17,8 @@
*/
package org.apache.abdera.model;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.Date;
import java.util.List;
@@ -242,13 +244,30 @@
/**
* Sets the content for this entry
* @param dataHandler The Data Handler containing the binary content needing Base64 encoding.
- * @return mediaType The mediatype of the binary content
+ * @param mediaType The mediatype of the binary content
+ * @return The created content element
* @throws MimeTypeParseException if the media type specified is malformed
*/
Content setContent(DataHandler dataHandler, String mediatype) throws MimeTypeParseException;
/**
* Sets the content for this entry
+ * @param inputStream An inputstream providing binary content
+ * @return The created content element
+ */
+ Content setContent(InputStream inputStream);
+
+ /**
+ * Sets the content for this entry
+ * @param inputStream An inputstream providing binary content
+ * @param mediaType The mediatype of the binary content
+ * @return The created content element
+ * @throws MimeTypeParseException if the media type specified is malformed
+ */
+ Content setContent(InputStream inputStream, String mediatype) throws MimeTypeParseException;
+
+ /**
+ * Sets the content for this entry
* @param value the string value of the content
* @param mediatype the media type for the content
* @return The newly created atom:content
@@ -272,6 +291,13 @@
* @return text content
*/
String getContent();
+
+ /**
+ * Returns an input stream from the content element value. This is particularly
+ * useful when dealing with Base64 binary content.
+ * @throws IOException
+ */
+ InputStream getContentStream() throws IOException;
/**
* Returns the content/@src attribute, if any
Added: incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/InputStreamDataSource.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/InputStreamDataSource.java?view=auto&rev=524843
==============================================================================
--- incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/InputStreamDataSource.java (added)
+++ incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/InputStreamDataSource.java Mon Apr 2 10:17:59 2007
@@ -0,0 +1,64 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. 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. For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.abdera.i18n.io;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import javax.activation.DataSource;
+
+public final class InputStreamDataSource
+ implements DataSource {
+
+ public static final String DEFAULT_TYPE = "application/octet-stream";
+
+ private final InputStream in;
+ private final String ctype;
+
+ public InputStreamDataSource(
+ InputStream in) {
+ this(in,null);
+ }
+
+ public InputStreamDataSource(
+ InputStream in,
+ String ctype) {
+ this.in = in;
+ this.ctype = (ctype != null) ? ctype : DEFAULT_TYPE;
+ }
+
+ public String getContentType() {
+ return ctype;
+ }
+
+ public String getName() {
+ return null;
+ }
+
+ public InputStream getInputStream()
+ throws IOException {
+ return in;
+ }
+
+ public OutputStream getOutputStream()
+ throws IOException {
+ return null;
+ }
+
+}
\ No newline at end of file
Modified: incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMEntry.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMEntry.java?view=diff&rev=524843&r1=524842&r2=524843
==============================================================================
--- incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMEntry.java (original)
+++ incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMEntry.java Mon Apr 2 10:17:59 2007
@@ -17,6 +17,8 @@
*/
package org.apache.abdera.parser.stax;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.Date;
import java.util.List;
@@ -44,6 +46,7 @@
import org.apache.abdera.parser.stax.util.FOMHelper;
import org.apache.abdera.util.Constants;
import org.apache.abdera.util.URIHelper;
+import org.apache.abdera.i18n.io.InputStreamDataSource;
import org.apache.abdera.i18n.iri.IRI;
import org.apache.abdera.i18n.iri.IRISyntaxException;
import org.apache.axiom.om.OMContainer;
@@ -259,6 +262,30 @@
/**
* Sets the content for this entry
+ */
+ public Content setContent(InputStream in) {
+ InputStreamDataSource ds = new InputStreamDataSource(in);
+ DataHandler dh = new DataHandler(ds);
+ Content content = null;
+ try {
+ content = setContent(dh);
+ } catch (MimeTypeParseException e) {
+ // should not happen
+ }
+ return content;
+ }
+
+ /**
+ * Sets the content for this entry
+ */
+ public Content setContent(InputStream in, String mediatype) throws MimeTypeParseException {
+ InputStreamDataSource ds = new InputStreamDataSource(in, mediatype);
+ DataHandler dh = new DataHandler(ds);
+ return setContent(dh, mediatype);
+ }
+
+ /**
+ * Sets the content for this entry
* @throws MimeTypeParseException
*/
public Content setContent(String value, String mediatype) throws MimeTypeParseException {
@@ -733,6 +760,12 @@
public String getContent() {
Content content = getContentElement();
return (content != null) ? content.getValue() : null;
+ }
+
+ public InputStream getContentStream() throws IOException {
+ Content content = getContentElement();
+ DataHandler dh = content.getDataHandler();
+ return dh.getInputStream();
}
public IRI getContentSrc() throws IRISyntaxException {
Modified: incubator/abdera/java/trunk/parser/src/test/java/org/apache/abdera/test/parser/stax/FOMTest.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/test/java/org/apache/abdera/test/parser/stax/FOMTest.java?view=diff&rev=524843&r1=524842&r2=524843
==============================================================================
--- incubator/abdera/java/trunk/parser/src/test/java/org/apache/abdera/test/parser/stax/FOMTest.java (original)
+++ incubator/abdera/java/trunk/parser/src/test/java/org/apache/abdera/test/parser/stax/FOMTest.java Mon Apr 2 10:17:59 2007
@@ -17,9 +17,12 @@
*/
package org.apache.abdera.test.parser.stax;
+import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.ByteArrayOutputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
import java.net.URL;
import java.util.Calendar;
import java.util.Date;
@@ -765,7 +768,32 @@
entry.setContent(foo, "application/foo+xml");
assertEquals(entry.getContentElement().getValueElement(),foo);
+ }
+
+ public void testSetContent2() throws Exception {
+
+ Abdera abdera = new Abdera();
+ Entry entry = abdera.newEntry();
+ InputStream in =
+ new ByteArrayInputStream(
+ "tóst".getBytes("utf-16"));
+
+ Document<Entry> edoc = entry.getDocument();
+ entry.setContent(in,"text/plain;charset=\"utf-16\"");
+
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ OutputStreamWriter w = new OutputStreamWriter(out);
+ edoc.writeTo(w);
+
+ in = new ByteArrayInputStream(out.toByteArray());
+
+ entry = (Entry) abdera.getParser().parse(in).getRoot();
+
+ in = entry.getContentStream();
+ InputStreamReader r = new InputStreamReader(in,entry.getContentMimeType().getParameter("charset"));
+ BufferedReader b = new BufferedReader(r);
+ assertEquals(b.readLine(),"tóst");
}
}