Author: jvazquez
Date: Tue Feb 17 19:25:35 2009
New Revision: 745203

URL: http://svn.apache.org/viewvc?rev=745203&view=rev
Log:
Adding Document href parameter

Modified:
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/XplBuilder.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Document.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/XplElement.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/XplElementFactory.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractXplElement.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/DocumentImpl.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XplElementFactoryImpl.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XsltImpl.java

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/XplBuilder.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/XplBuilder.java?rev=745203&r1=745202&r2=745203&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/XplBuilder.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/XplBuilder.java
 Tue Feb 17 19:25:35 2009
@@ -1,6 +1,8 @@
 package org.apache.sling.xproc;
 
 import java.io.Reader;
+import java.util.HashMap;
+import java.util.Map;
 
 import javax.xml.namespace.QName;
 
@@ -37,8 +39,8 @@
                this.xplElementFactory = new XplElementFactoryImpl();
        }
        
-       protected XplElement createXplElement(String localName) {
-        return XplBuilder.this.xplElementFactory.createXplElement(new 
QName(XplConstants.NS_XPROC, localName));
+       protected XplElement createXplElement(String localName, Map<String, 
String> parameters) {
+        return XplBuilder.this.xplElementFactory.createXplElement(new 
QName(XplConstants.NS_XPROC, localName), parameters);
     }
        
        class XplHandler extends DefaultHandler {
@@ -68,14 +70,20 @@
                public void startElement(String uri, String localName, String 
name, Attributes attributes) throws SAXException {
                        if (this.currentXplElement == null) {
                                if 
(XplConstants.QNAME_PIPELINE.getLocalPart().equals(localName)) {
-                                       this.rootStep = (Step) 
XplBuilder.this.createXplElement(localName);
+                                       this.rootStep = (Step) 
XplBuilder.this.createXplElement(localName, null);
                                        this.currentXplElement = this.rootStep;
                                        return;
                                }
                                throw new IllegalStateException("Expected 
'pipeline' as first element, but received '" + localName + "'");
                        }
                        
-                       XplElement xplElement = createXplElement(localName);
+                       Map<String, String> parameters = new HashMap<String, 
String>();
+            int length = attributes.getLength();
+            for (int i = 0; i < length; i++) {
+                parameters.put(attributes.getQName(i), attributes.getValue(i));
+            }
+                       
+                       XplElement xplElement = createXplElement(localName, 
parameters);
                        this.currentXplElement.addChild(xplElement);
                        this.currentXplElement = xplElement;
                }

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Document.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Document.java?rev=745203&r1=745202&r2=745203&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Document.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Document.java
 Tue Feb 17 19:25:35 2009
@@ -1,5 +1,9 @@
 package org.apache.sling.xproc.api;
 
 public interface Document extends XplElement {
+       
+       String getHref();
 
+       void setHref(String href);
+       
 }

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/XplElement.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/XplElement.java?rev=745203&r1=745202&r2=745203&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/XplElement.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/XplElement.java
 Tue Feb 17 19:25:35 2009
@@ -1,9 +1,13 @@
 package org.apache.sling.xproc.api;
 
+import java.util.Map;
+
 public interface XplElement {
        
        XplElement getParent();
        
+       void setParameters(Map<String, String> parameters);
+       
        void setParent(XplElement parent);
        
        void addChild(XplElement child);

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/XplElementFactory.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/XplElementFactory.java?rev=745203&r1=745202&r2=745203&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/XplElementFactory.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/XplElementFactory.java
 Tue Feb 17 19:25:35 2009
@@ -1,9 +1,11 @@
 package org.apache.sling.xproc.api;
 
+import java.util.Map;
+
 import javax.xml.namespace.QName;
 
 public interface XplElementFactory {
        
-       XplElement createXplElement(QName type);
+       XplElement createXplElement(QName type, Map<String, String> parameters);
        
 }

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractXplElement.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractXplElement.java?rev=745203&r1=745202&r2=745203&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractXplElement.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractXplElement.java
 Tue Feb 17 19:25:35 2009
@@ -1,12 +1,24 @@
 package org.apache.sling.xproc.impl;
 
+import java.lang.reflect.Field;
+import java.util.HashMap;
 import java.util.LinkedList;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.sling.xproc.api.Invocation;
 import org.apache.sling.xproc.api.XplElement;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public abstract class AbstractXplElement implements XplElement {
-
+       
+       protected final Logger log = LoggerFactory.getLogger(this.getClass());
+       
+       private final Map<String, String> parameters = new HashMap<String, 
String>();
+       
        private XplElement parent; 
        
        private final LinkedList<XplElement> children = new 
LinkedList<XplElement>();
@@ -22,6 +34,40 @@
                }
        }
        
+       public void setParameters(Map<String, String> parameters) {
+               if (parameters == null || parameters.isEmpty()) {
+            // nothing to do
+            return;
+        }
+
+        // check for special parameter fields
+        Map<String, Field> parameterFields = this.getParameterFields();
+        for (Entry<String, String> entry : parameters.entrySet()) {
+            String key = entry.getKey();
+            String value = entry.getValue();
+
+            Field parameterField = parameterFields.get(key);
+            if (parameterField != null) {
+                parameterField.setAccessible(true);
+                try {
+                    parameterField.set(this, value);
+                } catch (IllegalArgumentException e) {
+                    String message = "Failed to set parameter field " + key;
+                    this.log.error(message, e);
+                    throw new RuntimeException(message, e);
+                } catch (IllegalAccessException e) {
+                    String message = "Failed to set parameter field " + key;
+                    this.log.error(message, e);
+                    throw new RuntimeException(message, e);
+                }
+                continue;
+            }
+
+            // default parameter processing
+            this.processParameter(key, value);
+        }
+       }
+       
        public XplElement getParent() {
                return parent;
        }
@@ -29,5 +75,45 @@
        public void setParent(XplElement parent) {
                this.parent = parent;
        }
+       
+       protected void processParameter(String key, String value) {
+        this.parameters.put(key, value);
+    }
+
+    private Map<String, Field> getParameterFields() {
+        Map<String, Field> parameterFields = new HashMap<String, Field>();
+
+        Class<?> currentClass = this.getClass();
+        while (currentClass != null) {
+            Field[] declaredFields = currentClass.getDeclaredFields();
+            for (Field declaredField : declaredFields) {              
+                String fieldName = 
this.convertCamelCase(declaredField.getName());
+                parameterFields.put(fieldName, declaredField);
+            }
+
+            currentClass = currentClass.getSuperclass();
+        }
+
+        return parameterFields;
+    }
+
+    private String convertCamelCase(String name) {
+        Pattern camelCasePattern = Pattern.compile("(.)([A-Z])");
+        Matcher matcher = camelCasePattern.matcher(name);
+
+        int lastMatch = 0;
+        StringBuilder result = new StringBuilder();
+        while (matcher.find()) {
+            result.append(name.substring(lastMatch, matcher.start()));
+            result.append(matcher.group(1));
+            result.append("-");
+            result.append(matcher.group(2).toLowerCase());
+            lastMatch = matcher.end();
+        }
+
+        result.append(name.substring(lastMatch, name.length()));
+
+        return result.toString();
+    }
 
 }

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/DocumentImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/DocumentImpl.java?rev=745203&r1=745202&r2=745203&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/DocumentImpl.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/DocumentImpl.java
 Tue Feb 17 19:25:35 2009
@@ -1,8 +1,27 @@
 package org.apache.sling.xproc.impl;
 
+import java.net.URL;
+
+import org.apache.cocoon.pipeline.component.sax.XSLTTransformer;
 import org.apache.sling.xproc.api.Document;
+import org.apache.sling.xproc.api.Invocation;
 
 public class DocumentImpl extends AbstractXplElement implements Document {
 
+       private String href;
+       
+       @Override
+       public void invoke(Invocation invocation) throws Exception {
+               invocation.getCocoonPipeline().addComponent(new 
XSLTTransformer(new URL(href)));
+               super.invoke(invocation);
+       }
+       
+       public String getHref() {
+               return href;
+       }
 
+       public void setHref(String href) {
+               this.href = href;
+       }
+       
 }

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XplElementFactoryImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XplElementFactoryImpl.java?rev=745203&r1=745202&r2=745203&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XplElementFactoryImpl.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XplElementFactoryImpl.java
 Tue Feb 17 19:25:35 2009
@@ -1,5 +1,7 @@
 package org.apache.sling.xproc.impl;
 
+import java.util.Map;
+
 import javax.xml.namespace.QName;
 
 import org.apache.sling.xproc.XplConstants;
@@ -8,18 +10,25 @@
 
 public class XplElementFactoryImpl implements XplElementFactory {
 
-       public XplElement createXplElement(QName type) {
+       public XplElement createXplElement(QName type, Map<String, String> 
parameters) {
+               
+               XplElement xplElement;
+               
                if (XplConstants.QNAME_PIPELINE.equals(type)) {
-                       return new PipelineImpl();
+                       xplElement = new PipelineImpl();
                } else if (XplConstants.QNAME_XSLT.equals(type)) {
-                       return new XsltImpl();
+                       xplElement = new XsltImpl();
                } else if (XplConstants.QNAME_INPUT.equals(type)) {
-                       return new InputImpl();
+                       xplElement = new InputImpl();
                } else if (XplConstants.QNAME_DOCUMENT.equals(type)) {
-                       return new DocumentImpl();
+                       xplElement = new DocumentImpl();
                } else {
                        throw new IllegalArgumentException("An xpl element of 
type '" + type + "' could not be created.");
                }
+               
+               xplElement.setParameters(parameters);
+               
+               return xplElement;
        }
 
 }

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XsltImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XsltImpl.java?rev=745203&r1=745202&r2=745203&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XsltImpl.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XsltImpl.java
 Tue Feb 17 19:25:35 2009
@@ -1,18 +1,7 @@
 package org.apache.sling.xproc.impl;
 
-import java.net.URL;
-
-import org.apache.cocoon.pipeline.component.sax.XSLTTransformer;
-import org.apache.sling.xproc.api.Invocation;
 import org.apache.sling.xproc.api.Xslt;
 
 public class XsltImpl extends AbstractXplElement implements Xslt {
 
-       @Override
-       public void invoke(Invocation invocation) throws Exception {
-               URL xsltUrl = new 
URL("http://localhost:8888/pipeline-sample/transform/test-content.xslt";);
-               invocation.getCocoonPipeline().addComponent(new 
XSLTTransformer(xsltUrl));
-               super.invoke(invocation);
-       }
-
-}
+}
\ No newline at end of file


Reply via email to