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 2006/08/29 01:35:04 UTC

svn commit: r437876 - in /incubator/abdera/java/trunk: core/src/main/java/org/apache/abdera/util/ core/src/main/java/org/apache/abdera/writer/ extensions/src/main/java/org/apache/abdera/ext/json/ parser/src/main/java/org/apache/abdera/parser/stax/ pars...

Author: jmsnell
Date: Mon Aug 28 16:35:04 2006
New Revision: 437876

URL: http://svn.apache.org/viewvc?rev=437876&view=rev
Log:
* Add the ability to lookup NamedWriter instances by the media type of the output
  format they support (e.g., WriterFactory.getWriterByMediaType("application/json"); )

* Create an abstract base impl for NamedWriters

* Modify the JSON and PrettyXML writers to use the abstract base impl

Added:
    incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractNamedWriter.java
Modified:
    incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/NamedWriter.java
    incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/WriterFactory.java
    incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/json/JSONWriter.java
    incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMWriterFactory.java
    incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/util/PrettyWriter.java

Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractNamedWriter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractNamedWriter.java?rev=437876&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractNamedWriter.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractNamedWriter.java Mon Aug 28 16:35:04 2006
@@ -0,0 +1,48 @@
+/*
+* 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.util;
+
+import org.apache.abdera.writer.NamedWriter;
+
+public abstract class AbstractNamedWriter 
+  implements NamedWriter {
+
+  protected String name = null;
+  protected String[] formats = null;
+  
+  protected AbstractNamedWriter(String name, String[] formats ) {
+    this.name = name;
+    this.formats = formats;
+  }
+  
+  public String getName() {
+    return name;
+  }
+
+  public String[] getOutputFormats() {
+    return formats;
+  }
+
+  public boolean outputsFormat(String mediatype) {
+    for (String format : formats) {
+      if (MimeTypeHelper.isMatch(format, mediatype))
+        return true;
+    }
+    return false;
+  }
+}

Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/NamedWriter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/NamedWriter.java?rev=437876&r1=437875&r2=437876&view=diff
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/NamedWriter.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/NamedWriter.java Mon Aug 28 16:35:04 2006
@@ -20,5 +20,15 @@
 public interface NamedWriter extends Writer {
 
   String getName();
+
+  /**
+   * Return the media type of the format produced by this writer
+   */
+  String[] getOutputFormats();
   
+  /**
+   * Returns true if the format produced by this writer matches the specified
+   * media type
+   */
+  boolean outputsFormat(String mediatype);
 }

Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/WriterFactory.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/WriterFactory.java?rev=437876&r1=437875&r2=437876&view=diff
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/WriterFactory.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/WriterFactory.java Mon Aug 28 16:35:04 2006
@@ -23,4 +23,5 @@
   
   Writer getWriter(String name);
   
+  Writer getWriterByMediaType(String mediatype);
 }

Modified: incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/json/JSONWriter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/json/JSONWriter.java?rev=437876&r1=437875&r2=437876&view=diff
==============================================================================
--- incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/json/JSONWriter.java (original)
+++ incubator/abdera/java/trunk/extensions/src/main/java/org/apache/abdera/ext/json/JSONWriter.java Mon Aug 28 16:35:04 2006
@@ -38,15 +38,30 @@
 import org.apache.abdera.model.Service;
 import org.apache.abdera.model.Workspace;
 import org.apache.abdera.model.Content.Type;
+import org.apache.abdera.util.AbstractNamedWriter;
 import org.apache.abdera.writer.NamedWriter;
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
 
-public class JSONWriter implements NamedWriter {
+public class JSONWriter
+  extends AbstractNamedWriter
+  implements NamedWriter {
 
   public static final String NAME = "json";
 
+  public static final String[] FORMATS = {
+    "application/json",
+    "application/javascript",
+    "application/ecmascript",
+    "text/javascript",
+    "text/ecmascript"
+  };
+  
+  public JSONWriter() {
+    super(NAME,FORMATS);
+  }
+  
   public String getName() {
     return NAME;
   }

Modified: incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMWriterFactory.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMWriterFactory.java?rev=437876&r1=437875&r2=437876&view=diff
==============================================================================
--- incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMWriterFactory.java (original)
+++ incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMWriterFactory.java Mon Aug 28 16:35:04 2006
@@ -50,6 +50,14 @@
       loadWriters().get(name.toLowerCase()) : getWriter();
   }
 
+  public Writer getWriterByMediaType(String mediatype) {
+    Map<String,NamedWriter> writers = loadWriters();
+    for (NamedWriter writer : writers.values()) {
+      if (writer.outputsFormat(mediatype)) return writer;
+    }
+    return null;
+  }
+  
   private Map<String,NamedWriter> loadWriters() {
     return getAbdera().getConfiguration().getNamedWriters();
   }

Modified: incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/util/PrettyWriter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/util/PrettyWriter.java?rev=437876&r1=437875&r2=437876&view=diff
==============================================================================
--- incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/util/PrettyWriter.java (original)
+++ incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/util/PrettyWriter.java Mon Aug 28 16:35:04 2006
@@ -30,17 +30,26 @@
 
 import org.apache.abdera.model.Base;
 import org.apache.abdera.model.Document;
+import org.apache.abdera.util.AbstractNamedWriter;
 import org.apache.abdera.writer.NamedWriter;
 import org.apache.axiom.om.OMDocument;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.util.StAXUtils;
 
-public class PrettyWriter implements NamedWriter {
-
-  public String getName() {
-    return "PrettyXML";
+public class PrettyWriter
+  extends AbstractNamedWriter 
+  implements NamedWriter {
+
+  private static final String[] FORMATS = {
+    "application/atom+xml",
+    "application/atomserv+xml",
+    "application/xml"
+  };
+  
+  public PrettyWriter() {
+    super("PrettyXML", FORMATS);
   }
-
+  
   public Object write(Base base) throws IOException {
     ByteArrayOutputStream out = new ByteArrayOutputStream();
     writeTo(base,out);
@@ -259,4 +268,5 @@
       return spaces;
     }
   }
+
 }