You are viewing a plain text version of this content. The canonical link for it is here.
Posted to svn@forrest.apache.org by th...@apache.org on 2009/01/23 11:57:26 UTC

svn commit: r736995 - /forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/factories/ContractFactory.java

Author: thorsten
Date: Fri Jan 23 02:57:26 2009
New Revision: 736995

URL: http://svn.apache.org/viewvc?rev=736995&view=rev
Log:
Adding more javadoc to explain the purpose of the class. Enhancing factory to only make one instance of a contract and reuse it. Will save quite a lot of processing time.

Modified:
    forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/factories/ContractFactory.java

Modified: forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/factories/ContractFactory.java
URL: http://svn.apache.org/viewvc/forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/factories/ContractFactory.java?rev=736995&r1=736994&r2=736995&view=diff
==============================================================================
--- forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/factories/ContractFactory.java (original)
+++ forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/factories/ContractFactory.java Fri Jan 23 02:57:26 2009
@@ -12,6 +12,12 @@
 import org.apache.forrest.dispatcher.exception.DispatcherException;
 import org.apache.forrest.dispatcher.impl.XSLContract;
 
+/**
+ * ContractFactory that will resolve a contract by a given name.
+ * If the contract has not registered with the factory (stored in
+ * a HashMap), we assume that we have a xsl based contract. This
+ * contract we will then resolve it and initialize it. 
+ */
 public class ContractFactory {
 
   protected final Log log = LogFactory.getLog(this.getClass()
@@ -19,12 +25,18 @@
 
   private DispatcherBean config;
 
+  /**
+   * Create the factory based on the dispatcher bean.
+   * @param config the dispatcher bean where we store the current properties.
+   */
   public ContractFactory(DispatcherBean config) {
     this.config = config;
   }
 
   private Map<String, Contract> map = null;
 
+  private Contract dummyContract;
+
   /**
    * Get the register which contains all components.
    * 
@@ -63,12 +75,19 @@
        * because they are configured via spring and should be in the map at this
        * point in time.
        * 
+       * Since we only really need ONE instance of a contract, we will check whether 
+       * we already have set this up?
+       */
+      if (dummyContract == null){
+        dummyContract = new XSLContract(config.isAllowXmlProperties(),config.getTransFact());
+      }
+      contract = dummyContract;
+      /*
        * This means we will now try to resolve the contract via a url, which
        * will return a stream. If this stream is null it means that the
        * requested contract does not exist. Otherwise it is a xsl based
        * contract.
        */
-      contract = new XSLContract(config.isAllowXmlProperties(),config.getTransFact(),config.getStaxHelper());
       String uri = config.getContractUriPrefix() + name + config.getContractUriSufix();
       InputStream xslStream = config.getResolver().resolve(uri);
       contract.initializeFromStream(xslStream);