Author: thorsten
Date: Wed Sep 17 04:29:54 2008
New Revision: 696252

URL: http://svn.apache.org/viewvc?rev=696252&view=rev
Log:
Adding a contractFactory which will take care to return the contract that is 
requested

Added:
    
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/factories/
    
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/factories/ContractFactory.java
   (with props)

Added: 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/factories/ContractFactory.java
URL: 
http://svn.apache.org/viewvc/forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/factories/ContractFactory.java?rev=696252&view=auto
==============================================================================
--- 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/factories/ContractFactory.java
 (added)
+++ 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/factories/ContractFactory.java
 Wed Sep 17 04:29:54 2008
@@ -0,0 +1,86 @@
+package org.apache.forrest.dispatcher.factories;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.forrest.dispatcher.api.Contract;
+import org.apache.forrest.dispatcher.config.DispatcherBean;
+import org.apache.forrest.dispatcher.exception.DispatcherException;
+import org.apache.forrest.dispatcher.impl.XSLContract;
+
+public class ContractFactory {
+
+  protected final Log log = LogFactory.getLog(this.getClass()
+      .getCanonicalName());
+
+  private DispatcherBean config;
+
+  public ContractFactory(DispatcherBean config) {
+    this.config = config;
+  }
+
+  private Map<String, Contract> map = null;
+
+  /**
+   * Get the register which contains all components.
+   * 
+   * @return the register which contains all components
+   */
+  public Map<String, Contract> getMap() {
+    if (null == map) {
+      map = new HashMap<String, Contract>();
+    }
+    return map;
+  }
+
+  /**
+   * Set the register which contains all components.
+   * 
+   * @param map
+   *          the register which contains all components.
+   */
+  public void setMap(Map<String, Contract> map) {
+    this.map = map;
+  }
+
+  /**
+   * Will lookup which component is linked to the name and will return it.
+   * 
+   * @param name
+   *          -the name of the component you need.
+   * @return plugin to process the job.
+   * @throws DispatcherException
+   */
+  public Contract resolve(String name) throws DispatcherException {
+    Contract contract = getMap().get(name);
+    if (null == contract) {
+      /*
+       * If the contract is null here that means we do not have a java contract
+       * because they are configured via spring and should be in the map at 
this
+       * point in time.
+       * 
+       * 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());
+      InputStream xslStream = config.getResolver().resolve(
+          config.getContractUriPrefix() + name + config.getContractUriSufix());
+      contract.initializeFromStream(xslStream);
+      // closing stream
+      if (xslStream != null) {
+        try {
+          xslStream.close();
+        } catch (IOException e) {
+          log.fatal(e);
+        }
+      }
+    }
+    return contract;
+  }
+}

Propchange: 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/factories/ContractFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native