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