Author: thorsten
Date: Tue Sep  9 06:06:25 2008
New Revision: 693454

URL: http://svn.apache.org/viewvc?rev=693454&view=rev
Log:
Starting the rewrite with the contracts

Added:
    
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/api/Contract.java
   (with props)
    
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/helper/Loggable.java
   (with props)
    
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/helper/StAX.java
   (with props)
    
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/helper/XSLContractHelper.java
   (with props)
    
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/impl/XSLContract.java
   (with props)
    forrest/trunk/whiteboard/dispatcher/lib/commons-logging-1.1.1.jar   (with 
props)
    forrest/trunk/whiteboard/dispatcher/lib/log4j-1.2.14.jar   (with props)
Modified:
    forrest/trunk/whiteboard/dispatcher/build.xml

Modified: forrest/trunk/whiteboard/dispatcher/build.xml
URL: 
http://svn.apache.org/viewvc/forrest/trunk/whiteboard/dispatcher/build.xml?rev=693454&r1=693453&r2=693454&view=diff
==============================================================================
--- forrest/trunk/whiteboard/dispatcher/build.xml (original)
+++ forrest/trunk/whiteboard/dispatcher/build.xml Tue Sep  9 06:06:25 2008
@@ -37,7 +37,7 @@
     <property name="dispatcher.build.compiler.type"        value="classic"/>
     <property name="dispatcher.build.compiler.vm"          value="1.5"/>
     <property name="name" value="apache-dispatcher"/>
-    <property name="dispatcher.version" value="0.0.1-dev"/>
+    <property name="dispatcher.version" value="0.0.2-dev"/>
     <property name="dispatcher.home" location="."/>
     <property file="${dispatcher.home}/local.build.properties" />
     <property file="${dispatcher.home}/build.properties" />

Added: 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/api/Contract.java
URL: 
http://svn.apache.org/viewvc/forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/api/Contract.java?rev=693454&view=auto
==============================================================================
--- 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/api/Contract.java
 (added)
+++ 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/api/Contract.java
 Tue Sep  9 06:06:25 2008
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * 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.
+ */
+package org.apache.forrest.dispatcher.api;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.HashMap;
+
+public interface Contract {
+  /**
+   * Some contracts are based on text based files. Best known example are the
+   * xsl contracts as the first implementation.
+   * 
+   * @param stream
+   *          that contains all information of the contract as description,
+   *          name, usage, ...
+   */
+  void initializeFromStream(InputStream stream);
+
+  /**
+   * Execute the contract with the given DataStream. The dataStream serves as
+   * base to do a transformation (in xsl based contracts) or invocation of
+   * business logic if used in java based contracts.
+   * 
+   * @param dataStream
+   *          base to do the transformation or invoked business logic
+   * @param properties
+   *          the parameter that configure the contract (customizing it)
+   * @return the resulting transformation of the dataStream with the given
+   *         properties.
+   */
+  OutputStream execute(InputStream dataStream, HashMap properties);
+
+  /**
+   * @return the name of the contract
+   */
+  String getName();
+
+  /**
+   * @param contractName
+   *          - the name of the contract
+   */
+  void setName(String contractName);
+
+  /**
+   * @return the description of the contract
+   */
+  String getDescription();
+
+  /**
+   * @param Description
+   *          - the description of the contract
+   */
+  void setDescription(String contractDescription);
+
+  /**
+   * @return how to use the contract
+   */
+  String getUsage();
+
+  /**
+   * @param contractUsage
+   *          - how to use the contract
+   */
+  void setUsage(String contractUsage);
+
+}

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

Added: 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/helper/Loggable.java
URL: 
http://svn.apache.org/viewvc/forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/helper/Loggable.java?rev=693454&view=auto
==============================================================================
--- 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/helper/Loggable.java
 (added)
+++ 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/helper/Loggable.java
 Tue Sep  9 06:06:25 2008
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * 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.
+ */
+package org.apache.forrest.dispatcher.helper;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Simple wrapper class to easier debug/log.
+ * 
+ * @author thorsten
+ * @version 1.0
+ */
+public class Loggable {
+
+  protected final Log log = LogFactory.getLog(this.getClass()
+      .getCanonicalName());
+
+  protected Loggable() {
+  }
+
+}
\ No newline at end of file

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

Added: 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/helper/StAX.java
URL: 
http://svn.apache.org/viewvc/forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/helper/StAX.java?rev=693454&view=auto
==============================================================================
--- 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/helper/StAX.java
 (added)
+++ 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/helper/StAX.java
 Tue Sep  9 06:06:25 2008
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * 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.
+ */
+package org.apache.forrest.dispatcher.helper;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import javax.xml.stream.XMLEventFactory;
+import javax.xml.stream.XMLEventReader;
+import javax.xml.stream.XMLEventWriter;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+/**
+ * Helper class that eases the usage of StAX in your plugins.
+ * 
+ * @author thorsten
+ * @version 1.0
+ * 
+ */
+public class StAX extends Loggable {
+  private XMLOutputFactory outputFactory = null;
+
+  private XMLEventFactory eventFactory = null;
+
+  private XMLInputFactory inputFactory = null;
+
+  /**
+   * Easy helper to get StAX based parser and writer.
+   */
+  public StAX() {
+    inputFactory = XMLInputFactory.newInstance();
+    outputFactory = XMLOutputFactory.newInstance();
+    eventFactory = XMLEventFactory.newInstance();
+  }
+
+  /**
+   * Get an event writer based on the incoming stream
+   * 
+   * @param stream
+   *                the stream we want to write to
+   * @return ready to use event writer
+   * @throws XMLStreamException
+   */
+  public XMLEventWriter getWriter(OutputStream stream)
+      throws XMLStreamException {
+    XMLEventWriter writer = outputFactory.createXMLEventWriter(stream);
+    return writer;
+  }
+
+  /**
+   * Get a stream writer based on the incoming stream
+   * 
+   * @param stream
+   *                the stream we want to write to
+   * @return ready to use stream writer
+   * @throws XMLStreamException
+   */
+  public XMLStreamWriter getStreamWriter(OutputStream stream)
+      throws XMLStreamException {
+    XMLStreamWriter writer = outputFactory.createXMLStreamWriter(stream);
+    return writer;
+  }
+
+  /**
+   * Get an event Parser based on the incoming stream
+   * 
+   * @param in
+   *                the stream we want to read from
+   * @return ready to use event parser
+   * @throws XMLStreamException
+   */
+  public XMLEventReader getEventParser(InputStream in)
+      throws XMLStreamException {
+    XMLEventReader parser = inputFactory.createXMLEventReader(in);
+    return parser;
+  }
+
+  /**
+   * Get a stream Parser based on the incoming stream
+   * 
+   * @param in
+   *                the stream we want to read from
+   * @return ready to use stream parser
+   * @throws XMLStreamException
+   */
+  public XMLStreamReader getParser(InputStream in) throws XMLStreamException {
+    XMLStreamReader parser = inputFactory.createXMLStreamReader(in);
+    return parser;
+  }
+
+  /**
+   * Get the ready to used EventFactory
+   * 
+   * @return ready to used EventFactory
+   */
+  public XMLEventFactory getEventFactory() {
+    return eventFactory;
+  }
+}

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

Added: 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/helper/XSLContractHelper.java
URL: 
http://svn.apache.org/viewvc/forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/helper/XSLContractHelper.java?rev=693454&view=auto
==============================================================================
--- 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/helper/XSLContractHelper.java
 (added)
+++ 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/helper/XSLContractHelper.java
 Tue Sep  9 06:06:25 2008
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * 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.
+ */
+package org.apache.forrest.dispatcher.helper;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.forrest.dispatcher.helper.StAX;
+
+public class XSLContractHelper extends StAX {
+  public ByteArrayOutputStream createEmptyXmlOutput() throws 
XMLStreamException {
+    ByteArrayOutputStream out = new ByteArrayOutputStream();
+    XMLStreamWriter writer = getStreamWriter(out);
+    writer.writeStartDocument("UTF-8", "1.0");
+    writer.writeStartElement("foo");
+    writer.writeEndDocument();
+    writer.flush();
+    writer.close();
+    return out;
+  }
+
+  public InputStream createEmptyXml() throws XMLStreamException {
+    ByteArrayOutputStream out = createEmptyXmlOutput();
+    return new BufferedInputStream(new 
ByteArrayInputStream(out.toByteArray()));
+  }
+}

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

Added: 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/impl/XSLContract.java
URL: 
http://svn.apache.org/viewvc/forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/impl/XSLContract.java?rev=693454&view=auto
==============================================================================
--- 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/impl/XSLContract.java
 (added)
+++ 
forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/impl/XSLContract.java
 Tue Sep  9 06:06:25 2008
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * 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.
+ */
+package org.apache.forrest.dispatcher.impl;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.HashMap;
+
+import javax.xml.stream.XMLStreamException;
+
+
+import org.apache.forrest.dispatcher.api.Contract;
+
+import org.apache.forrest.dispatcher.helper.Loggable;
+import org.apache.forrest.dispatcher.helper.XSLContractHelper;
+
+public class XSLContract extends Loggable implements Contract {
+
+  private String name="", usage="", description="";
+  private XSLContractHelper helper=null;
+
+  public OutputStream execute(InputStream dataStream, HashMap properties) {
+    /* 
+     * get a new instance of the corresponding helper class since the helper
+     * is doing the actual work
+     */
+     helper = new XSLContractHelper();
+    /*
+     *  If no dataStream is present we need to create an empty xml doc
+     *  to be able to invoke the xsl transformation.
+     */
+    if (null == dataStream) {
+      try {
+        dataStream = helper.createEmptyXml();
+      } catch (XMLStreamException e) {
+        log.fatal(e);
+      }
+    }
+
+    return null;
+  }
+
+  public void initializeFromStream(InputStream stream) {
+    // TODO Auto-generated method stub
+
+  }
+
+  public String getDescription() {
+    return description;
+  }
+
+  public void setDescription(String description) {
+    this.description = description;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getUsage() {
+    return usage;
+  }
+
+  public void setUsage(String usage) {
+    this.usage = usage;
+  }
+}

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

Added: forrest/trunk/whiteboard/dispatcher/lib/commons-logging-1.1.1.jar
URL: 
http://svn.apache.org/viewvc/forrest/trunk/whiteboard/dispatcher/lib/commons-logging-1.1.1.jar?rev=693454&view=auto
==============================================================================
Binary file - no diff available.

Propchange: forrest/trunk/whiteboard/dispatcher/lib/commons-logging-1.1.1.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: forrest/trunk/whiteboard/dispatcher/lib/log4j-1.2.14.jar
URL: 
http://svn.apache.org/viewvc/forrest/trunk/whiteboard/dispatcher/lib/log4j-1.2.14.jar?rev=693454&view=auto
==============================================================================
Binary file - no diff available.

Propchange: forrest/trunk/whiteboard/dispatcher/lib/log4j-1.2.14.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream