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 2008/05/16 07:28:39 UTC

svn commit: r656937 - /incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMEntry.java

Author: jmsnell
Date: Thu May 15 22:28:39 2008
New Revision: 656937

URL: http://svn.apache.org/viewvc?rev=656937&view=rev
Log:
https://issues.apache.org/jira/browse/ABDERA-159 - 
Entry content is encoded as base64 even if mime type of text/* is provided

Modified:
    incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMEntry.java

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?rev=656937&r1=656936&r2=656937&view=diff
==============================================================================
--- 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 Thu May 15 22:28:39 2008
@@ -19,6 +19,7 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.util.Date;
 import java.util.List;
 
@@ -33,6 +34,7 @@
 import org.apache.abdera.model.Control;
 import org.apache.abdera.model.DateTime;
 import org.apache.abdera.model.Div;
+import org.apache.abdera.model.Document;
 import org.apache.abdera.model.Element;
 import org.apache.abdera.model.Entry;
 import org.apache.abdera.model.Feed;
@@ -44,6 +46,7 @@
 import org.apache.abdera.model.Content.Type;
 import org.apache.abdera.parser.stax.util.FOMHelper;
 import org.apache.abdera.util.Constants;
+import org.apache.abdera.util.MimeTypeHelper;
 import org.apache.abdera.i18n.text.io.InputStreamDataSource;
 import org.apache.abdera.i18n.iri.IRI;
 import org.apache.axiom.om.OMContainer;
@@ -240,6 +243,8 @@
    */
   public Content setContent(Element element, String mediaType){
     try {
+      if (MimeTypeHelper.isText(mediaType))
+        throw new IllegalArgumentException();
       FOMFactory factory = (FOMFactory) this.factory;
       Content content = factory.newContent(new MimeType(mediaType));
       content.setValueElement(element);
@@ -263,12 +268,20 @@
    * @throws MimeTypeParseException 
    */
   public Content setContent(DataHandler dataHandler, String mediatype) {
-    FOMFactory factory = (FOMFactory) this.factory;
-    Content content = factory.newContent(Content.Type.MEDIA);
-    content.setDataHandler(dataHandler);
-    if (mediatype != null) content.setMimeType(mediatype);
-    setContentElement(content);
-    return content;
+    if (MimeTypeHelper.isText(mediatype)) {
+      try {
+        return setContent(dataHandler.getInputStream(),mediatype);
+      } catch (IOException e) {
+        throw new RuntimeException(e);
+      }
+    } else {
+      FOMFactory factory = (FOMFactory) this.factory;
+      Content content = factory.newContent(Content.Type.MEDIA);
+      content.setDataHandler(dataHandler);
+      if (mediatype != null) content.setMimeType(mediatype);
+      setContentElement(content);
+      return content;
+    }
   }
   
   /**
@@ -285,9 +298,27 @@
    * Sets the content for this entry
    */
   public Content setContent(InputStream in, String mediatype){
-    InputStreamDataSource ds = new InputStreamDataSource(in, mediatype);
-    DataHandler dh = new DataHandler(ds);
-    return setContent(dh, mediatype);
+    if (MimeTypeHelper.isText(mediatype)) {
+      try {
+        StringBuilder buf = new StringBuilder();
+        Document doc = this.getDocument();
+        String charset = doc != null ? doc.getCharset() : null;
+        charset = charset != null ? charset : "UTF-8";
+        InputStreamReader isr = new InputStreamReader(in);
+        char[] data = new char[500];
+        int r = -1;
+        while ((r = isr.read(data)) != -1) {
+          buf.append(data,0,r);
+        }
+        return setContent(buf.toString(), mediatype);
+      } catch (IOException e) {
+        throw new RuntimeException(e);
+      }
+    } else {
+      InputStreamDataSource ds = new InputStreamDataSource(in, mediatype);
+      DataHandler dh = new DataHandler(ds);
+      return setContent(dh, mediatype);
+    }
   }
   
   /**