You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by sy...@apache.org on 2005/10/24 21:11:52 UTC
svn commit: r328136 -
/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java
Author: sylvain
Date: Mon Oct 24 12:11:48 2005
New Revision: 328136
URL: http://svn.apache.org/viewcvs?rev=328136&view=rev
Log:
Add <ft:repeater> and <ft:repeater-rows> to forms transformer
Modified:
cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java?rev=328136&r1=328135&r2=328136&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java Mon Oct 24 12:11:48 2005
@@ -78,6 +78,8 @@
private static final String FORM_TEMPLATE_EL = "form-template";
private static final String GROUP = "group";
private static final String NEW = "new";
+ private static final String REPEATER = "repeater";
+ private static final String REPEATER_ROWS = "repeater-rows";
private static final String REPEATER_SIZE = "repeater-size";
private static final String REPEATER_WIDGET = "repeater-widget";
private static final String REPEATER_WIDGET_LABEL = "repeater-widget-label";
@@ -99,6 +101,8 @@
private final NestedHandler hNested = new NestedHandler();
private final NewHandler hNew = new NewHandler();
private final RepeaterSizeHandler hRepeaterSize = new RepeaterSizeHandler();
+ private final RepeaterHandler hRepeater = new RepeaterHandler();
+ private final RepeaterRowsHandler hRepeaterRows = new RepeaterRowsHandler();
private final RepeaterWidgetHandler hRepeaterWidget = new RepeaterWidgetHandler();
private final RepeaterWidgetLabelHandler hRepeaterWidgetLabel = new RepeaterWidgetLabelHandler();
private final SkipHandler hSkip = new SkipHandler();
@@ -145,6 +149,8 @@
templates.put(CONTINUATION_ID, hContinuationId);
templates.put(GROUP, hGroup);
templates.put(NEW, hNew);
+ templates.put(REPEATER, hRepeater);
+ templates.put(REPEATER_ROWS, hRepeaterRows);
templates.put(REPEATER_SIZE, hRepeaterSize);
templates.put(REPEATER_WIDGET, hRepeaterWidget);
templates.put(REPEATER_WIDGET_LABEL, hRepeaterWidgetLabel);
@@ -555,20 +561,93 @@
protected class RepeaterWidgetLabelHandler extends ErrorHandler {
public Handler startElement(String uri, String loc, String raw, Attributes attrs)
throws SAXException {
- setTypedWidget(loc, attrs, Repeater.class, "repeater");
+ Repeater repeater;
+ if (contextWidget instanceof Repeater) {
+ repeater = (Repeater)contextWidget;
+ } else {
+ setTypedWidget(loc, attrs, Repeater.class, "repeater");
+ repeater = (Repeater)widget;
+ widget = null;
+ }
String path = getRequiredAttributeValue(loc, attrs, "widget-id");
- ((Repeater) widget).generateWidgetLabel(path, getContentHandler());
- widget = null;
+ repeater.generateWidgetLabel(path, getContentHandler());
+ return this;
+ }
+
+ public void endElement(String uri, String loc, String raw)
+ throws SAXException {
+ }
+ }
+
+ /**
+ * Handles <code>ft:repeater</code> element. Should contain repeater-rows
+ */
+ protected class RepeaterHandler extends NestedHandler {
+ protected Class getWidgetClass() {
+ return Repeater.class;
+ }
+
+ protected String getWidgetName() {
+ return "repeater";
+ }
+
+ public Handler startElement(String uri, String loc, String raw, Attributes attrs)
+ throws SAXException {
+ setTypedWidget(loc, attrs, getWidgetClass(), getWidgetName());
+ if (!isVisible(widget)) {
+ return hNull;
+ }
+
+ contextWidgets.addFirst(contextWidget);
+ contextWidget = widget;
+ return this;
+ }
+
+ public void endElement(String uri, String loc, String raw)
+ throws SAXException {
+ contextWidget = (Widget) contextWidgets.removeFirst();
+ }
+ }
+
+ /**
+ * Handles <code>ft:repeater-rows</code> element.
+ */
+ protected class RepeaterRowsHandler extends BufferHandler {
+ public Handler startElement(String uri, String loc, String raw, Attributes attrs)
+ throws SAXException {
+ if (!(contextWidget instanceof Repeater)) {
+ throw new SAXException("<repeater-rows> cannot be used with " + contextWidget + ", at " + getLocation());
+ }
+ beginBuffer();
return this;
}
+ public Handler nestedElement(String uri, String loc, String raw, Attributes attrs)
+ throws SAXException {
+ return hBuffer;
+ }
+
public void endElement(String uri, String loc, String raw)
throws SAXException {
+ SaxBuffer buffer = endBuffer();
+ final Repeater repeater = (Repeater) contextWidget;
+ final int rowCount = repeater.getSize();
+ pushHandler(hNested);
+ contextWidgets.addFirst(contextWidget);
+ for (int i = 0; i < rowCount; i++) {
+ contextWidget = repeater.getRow(i);
+ if (isVisible(contextWidget)) {
+ buffer.toSAX(EffectWidgetReplacingPipe.this);
+ }
+ }
+ contextWidget = (Widget) contextWidgets.removeFirst();
+ popHandler();
+ widget = null;
}
}
/**
- * Handles <code>ft:repeater</code> element.
+ * Handles <code>ft:repeater-widget</code> element: a single element for both the repeater and its rows
*/
protected class RepeaterWidgetHandler extends BufferHandler {
public Handler startElement(String uri, String loc, String raw, Attributes attrs)