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/09/08 01:24:55 UTC

svn commit: r441299 - in /incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax: FOMBuilder.java FOMFactory.java FOMParserFactory.java FOMWriterFactory.java

Author: jmsnell
Date: Thu Sep  7 16:24:55 2006
New Revision: 441299

URL: http://svn.apache.org/viewvc?view=rev&rev=441299
Log:
General improvements by making some fields immutable, reducing some of the lazy instantiations

Modified:
    incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java
    incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMFactory.java
    incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMParserFactory.java
    incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMWriterFactory.java

Modified: incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java?view=diff&rev=441299&r1=441298&r2=441299
==============================================================================
--- incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java (original)
+++ incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java Thu Sep  7 16:24:55 2006
@@ -47,9 +47,9 @@
   extends StAXOMBuilder
   implements Constants {
 
-  private FOMFactory fomfactory = null;
+  private final FOMFactory fomfactory;
+  private final ParserOptions parserOptions;
   private Document fomDocument = null;
-  private ParserOptions parserOptions = null;
   private int depth = 0;
   private int depthInSkipElement = 0;
   private boolean ignoreWhitespace = false;

Modified: incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMFactory.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMFactory.java?view=diff&rev=441299&r1=441298&r2=441299
==============================================================================
--- incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMFactory.java (original)
+++ incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMFactory.java Thu Sep  7 16:24:55 2006
@@ -18,6 +18,7 @@
 package org.apache.abdera.parser.stax;
  
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -68,26 +69,26 @@
   extends OMLinkedListImplFactory 
   implements Factory, Constants, ExtensionFactory, FOMExtensionFactory {
 
-  private Abdera abdera = null;
-  private Map<QName,Class> extensions = null;
-  private List<ExtensionFactory> factories = null;
+  private final Map<QName,Class> extensions;
+  private final List<ExtensionFactory> factories;
   
   public FOMFactory() {
-    this.abdera = new Abdera();
+    this(new Abdera());
   }
   
   public FOMFactory(Abdera abdera) {
-    this.abdera = abdera;
+    List<ExtensionFactory> f= abdera.getConfiguration().getExtensionFactories();
+    this.factories = (f != null) ? 
+      new ArrayList<ExtensionFactory>(f) :
+      new ArrayList<ExtensionFactory>();
+    this.factories.add(this);
+    this.extensions = Collections.synchronizedMap(new HashMap<QName,Class>());
   }
   
   public Parser newParser() {
     return new FOMParser();
   }
   
-  private Abdera getAbdera() {
-    return abdera;
-  }
-  
   @SuppressWarnings("unchecked")
   public <T extends Element>Document<T> newDocument() {
     return new FOMDocument(this);
@@ -233,7 +234,7 @@
         new FOMContent(type, (OMContainer)parent,this);
       try {
         if (type.equals(Content.Type.XML))
-          content.setMimeType("application/xml");
+          content.setMimeType(XML_MEDIA_TYPE);
       } catch (MimeTypeParseException e) { /* Can't happen */ }
       return content;
   }
@@ -423,11 +424,6 @@
   }
 
   private List<ExtensionFactory> getExtensionFactories() {
-    if (factories == null) {
-      factories = new ArrayList<ExtensionFactory>(
-        getAbdera().getConfiguration().getExtensionFactories());
-    }
-    factories.add(0, this);
     return factories;
   }
   
@@ -794,7 +790,6 @@
   }
 
   public void registerExtension(QName qname, Class impl) {
-    if (extensions == null) extensions = new HashMap<QName,Class>();
     extensions.put(qname, impl);
   }
   
@@ -804,11 +799,9 @@
 
   public List<String> getNamespaces() {
     List<String> namespaces = new ArrayList<String>();
-    if (extensions != null) {
-      for (QName qname : extensions.keySet()) {
-        if (!namespaces.contains(qname.getNamespaceURI()))
-          namespaces.add(qname.getNamespaceURI());
-      }
+    for (QName qname : extensions.keySet()) {
+      if (!namespaces.contains(qname.getNamespaceURI()))
+        namespaces.add(qname.getNamespaceURI());
     }
     return namespaces;
   }
@@ -822,21 +815,19 @@
     QName qname, 
     Base parent, 
     Factory factory) {
-      if (extensions != null) {
-        Class _class = extensions.get(qname);
-        if (_class != null) {
-          try {
-            return (T)_class.getConstructor(
-              new Class[] {
-                QName.class,
-                OMContainer.class,
-                OMFactory.class}).newInstance(
-                  new Object[] {
-                    qname, 
-                    parent, 
-                    factory});
-          } catch (Exception e) {}
-        }
+      Class _class = extensions.get(qname);
+      if (_class != null) {
+        try {
+          return (T)_class.getConstructor(
+            new Class[] {
+              QName.class,
+              OMContainer.class,
+              OMFactory.class}).newInstance(
+                new Object[] {
+                  qname, 
+                  parent, 
+                  factory});
+        } catch (Exception e) {}
       }
       return null;
   }
@@ -847,23 +838,21 @@
     Base parent, 
     Factory factory, 
     OMXMLParserWrapper parserWrapper) {
-      if (extensions != null) {
-        Class _class = extensions.get(qname);
-        if (_class != null) {
-          try {
-            return (T)_class.getConstructor(
-              new Class[] {
-                QName.class,
-                OMContainer.class,
-                OMFactory.class,
-                OMXMLParserWrapper.class}).newInstance(
-                  new Object[] {
-                    qname, 
-                    parent, 
-                    factory,
-                    parserWrapper});
-          } catch (Exception e) {}
-        }
+      Class _class = extensions.get(qname);
+      if (_class != null) {
+        try {
+          return (T)_class.getConstructor(
+            new Class[] {
+              QName.class,
+              OMContainer.class,
+              OMFactory.class,
+              OMXMLParserWrapper.class}).newInstance(
+                new Object[] {
+                  qname, 
+                  parent, 
+                  factory,
+                  parserWrapper});
+        } catch (Exception e) {}
       }
       return null;
   }

Modified: incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMParserFactory.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMParserFactory.java?view=diff&rev=441299&r1=441298&r2=441299
==============================================================================
--- incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMParserFactory.java (original)
+++ incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/FOMParserFactory.java Thu Sep  7 16:24:55 2006
@@ -17,6 +17,7 @@
 */
 package org.apache.abdera.parser.stax;
 
+import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.abdera.Abdera;
@@ -27,14 +28,17 @@
 public class FOMParserFactory 
   implements ParserFactory {
 
-  private Abdera abdera = null;
+  private final Abdera abdera;
+  private final Map<String,NamedParser> parsers; 
   
   public FOMParserFactory() {
-    this.abdera = new Abdera();
+    this(new Abdera());
   }
   
   public FOMParserFactory(Abdera abdera) {
     this.abdera = abdera;
+    Map<String,NamedParser> p = getAbdera().getConfiguration().getNamedParsers();
+    this.parsers = (p != null) ? p : new HashMap<String,NamedParser>();
   }
   
   protected Abdera getAbdera() {
@@ -47,11 +51,11 @@
 
   public Parser getParser(String name) {
     return (name != null) ? 
-      loadParsers().get(name.toLowerCase()) : getParser();
+      getParsers().get(name.toLowerCase()) : getParser();
   }
 
-  private Map<String,NamedParser> loadParsers() {
-    return getAbdera().getConfiguration().getNamedParsers();
+  private Map<String,NamedParser> getParsers() {
+    return parsers;
   }
   
 }

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?view=diff&rev=441299&r1=441298&r2=441299
==============================================================================
--- 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 Thu Sep  7 16:24:55 2006
@@ -17,6 +17,7 @@
 */
 package org.apache.abdera.parser.stax;
 
+import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.abdera.Abdera;
@@ -27,14 +28,17 @@
 public class FOMWriterFactory 
   implements WriterFactory {
 
-  private Abdera abdera = null;
+  private final Abdera abdera;
+  private final Map<String,NamedWriter> writers;
   
   public FOMWriterFactory() {
-    this.abdera = new Abdera();
+    this(new Abdera());
   }
   
   public FOMWriterFactory(Abdera abdera) {
     this.abdera = abdera;
+    Map<String,NamedWriter>  w = getAbdera().getConfiguration().getNamedWriters();
+    writers = (w != null) ? w : new HashMap<String,NamedWriter>();
   }
   
   protected Abdera getAbdera() {
@@ -47,19 +51,19 @@
 
   public Writer getWriter(String name) {
     return (name != null) ? 
-      loadWriters().get(name.toLowerCase()) : getWriter();
+      getWriters().get(name.toLowerCase()) : getWriter();
   }
 
   public Writer getWriterByMediaType(String mediatype) {
-    Map<String,NamedWriter> writers = loadWriters();
+    Map<String,NamedWriter> writers = getWriters();
     for (NamedWriter writer : writers.values()) {
       if (writer.outputsFormat(mediatype)) return writer;
     }
     return null;
   }
   
-  private Map<String,NamedWriter> loadWriters() {
-    return getAbdera().getConfiguration().getNamedWriters();
+  private Map<String,NamedWriter> getWriters() {
+    return writers;
   }
   
 }