Return-Path: Delivered-To: apmail-cocoon-cvs-archive@www.apache.org Received: (qmail 32677 invoked from network); 12 Apr 2004 21:43:41 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 12 Apr 2004 21:43:41 -0000 Received: (qmail 26561 invoked by uid 500); 12 Apr 2004 21:43:28 -0000 Delivered-To: apmail-cocoon-cvs-archive@cocoon.apache.org Received: (qmail 26505 invoked by uid 500); 12 Apr 2004 21:43:27 -0000 Mailing-List: contact cvs-help@cocoon.apache.org; run by ezmlm Precedence: bulk Reply-To: dev@cocoon.apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list cvs@cocoon.apache.org Received: (qmail 26494 invoked by uid 500); 12 Apr 2004 21:43:27 -0000 Delivered-To: apmail-cocoon-2.1-cvs@apache.org Received: (qmail 26491 invoked from network); 12 Apr 2004 21:43:27 -0000 Received: from unknown (HELO minotaur.apache.org) (209.237.227.194) by daedalus.apache.org with SMTP; 12 Apr 2004 21:43:27 -0000 Received: (qmail 32631 invoked by uid 1546); 12 Apr 2004 21:43:39 -0000 Date: 12 Apr 2004 21:43:39 -0000 Message-ID: <20040412214339.32630.qmail@minotaur.apache.org> From: mpo@apache.org To: cocoon-2.1-cvs@apache.org Subject: cvs commit: cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/transformation EffectPipe.java EffectWidgetReplacingPipe.java X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N mpo 2004/04/12 14:43:39 Modified: src/blocks/forms/java/org/apache/cocoon/forms/transformation EffectPipe.java EffectWidgetReplacingPipe.java Log: Cloning the Attributes right away, since we want to be able to reference these created elements outside the scope of their start-element event. Additionally we could just make them a final member. This change required some additional refactoring to allow the removal of attributes. Revision Changes Path 1.6 +28 -59 cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectPipe.java Index: EffectPipe.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectPipe.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- EffectPipe.java 12 Apr 2004 14:05:09 -0000 1.5 +++ EffectPipe.java 12 Apr 2004 21:43:39 -0000 1.6 @@ -20,7 +20,6 @@ import org.apache.cocoon.xml.AbstractXMLPipe; import org.apache.cocoon.xml.SaxBuffer; import org.apache.cocoon.xml.XMLConsumer; -import org.apache.cocoon.xml.XMLUtils; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.Locator; @@ -63,8 +62,7 @@ public final String uri; public final String loc; public final String raw; - public Attributes attrs; - public boolean mine; + public final AttributesImpl attrs; public Element() { this(null, null, null, null, null); @@ -83,13 +81,14 @@ this.uri = uri; this.loc = loc; this.raw = raw; - this.attrs = XMLUtils.EMPTY_ATTRIBUTES; if (attrs == null) { - this.attrs = XMLUtils.EMPTY_ATTRIBUTES; - mine = true; - } else { - this.attrs = attrs; - mine = false; + if (loc == null && raw == null) { + this.attrs = null; // prefix-mapping use of this class doesn't need attrs + } else { + this.attrs = new AttributesImpl(); // be ready to possibly add + } + } else { + this.attrs = new AttributesImpl(attrs); } } @@ -101,31 +100,15 @@ */ public void addAttributes(Attributes newAttrs) { if (newAttrs == null || newAttrs.getLength() == 0) return; //nothing to add - if (attrs == XMLUtils.EMPTY_ATTRIBUTES) { - attrs = new AttributesImpl(newAttrs); - mine = true; - } else { - if (!mine) { - attrs = new AttributesImpl(attrs); - mine = true; - } - - AttributesImpl modifAttrs = ((AttributesImpl)attrs); - int newAttrsCount = newAttrs.getLength(); - for (int i = 0; i < newAttrsCount; i++) { - String uri = newAttrs.getURI(i); - String loc = newAttrs.getLocalName(i); - String raw = newAttrs.getQName(i); - String type = newAttrs.getType(i); - String value = newAttrs.getValue(i); - - int foundAttr = modifAttrs.getIndex(uri, loc); - if (foundAttr == -1) { - modifAttrs.addAttribute(uri, loc, raw, type, value); - } else { - modifAttrs.setAttribute(foundAttr, uri, loc, raw, type, value); - } - } + int newAttrsCount = newAttrs.getLength(); + for (int i = 0; i < newAttrsCount; i++) { + String uri = newAttrs.getURI(i); + String loc = newAttrs.getLocalName(i); + String raw = newAttrs.getQName(i); + String type = newAttrs.getType(i); + String value = newAttrs.getValue(i); + + addAttribute(uri, loc, raw, type, value); } } @@ -140,16 +123,11 @@ * @param value the value of the attribute to add. */ public void addAttribute(String uri, String loc, String raw, String type, String value) { - if (!mine || attrs == XMLUtils.EMPTY_ATTRIBUTES) { - attrs = new AttributesImpl(attrs); - mine = true; - } - AttributesImpl modifAttrs = ((AttributesImpl)attrs); - int foundAttr = modifAttrs.getIndex(uri, loc); + int foundAttr = this.attrs.getIndex(uri, loc); if (foundAttr == -1) { - modifAttrs.addAttribute(uri, loc, raw, type, value); + this.attrs.addAttribute(uri, loc, raw, type, value); } else { - modifAttrs.setAttribute(foundAttr, uri, loc, raw, type, value); + this.attrs.setAttribute(foundAttr, uri, loc, raw, type, value); } } @@ -160,19 +138,13 @@ public void addAttribute(String loc, String value) { this.addAttribute("", loc, loc, "CDATA", value); } - - //TODO: IMPORTANT!!! - // check this: when commenting out this stuff everything still compiles! - // this means that attributes on these objects are never explicitely "claimed" - // which means that these Element objects should never get referenced - // outside the scope of the SAX event that creates them. - // Is that really the case? -// public void claimAttributes() { -// if (!mine) { -// attrs = new AttributesImpl(attrs); -// mine = true; -// } -// } + + public void removeAttribute(String raw) { + int foundAttr = this.attrs.getIndex(raw); + if (foundAttr == -1) { + this.attrs.removeAttribute(foundAttr); + } + } } protected abstract class Handler { @@ -259,9 +231,6 @@ } public void startElement() throws SAXException { - if (element.attrs == null) { - element.attrs = XMLUtils.EMPTY_ATTRIBUTES; - } super.startElement(element.uri, element.loc, element.raw, element.attrs); elements.addFirst(element); element = null; 1.10 +2 -5 cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java Index: EffectWidgetReplacingPipe.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- EffectWidgetReplacingPipe.java 12 Apr 2004 14:05:09 -0000 1.9 +++ EffectWidgetReplacingPipe.java 12 Apr 2004 21:43:39 -0000 1.10 @@ -282,10 +282,7 @@ String formJXPath = input.attrs.getValue(LOCATION); if (formJXPath != null) { // remove the location attribute - AttributesImpl attrsCopy = new AttributesImpl(input.attrs); - attrsCopy.removeAttribute(input.attrs.getIndex(LOCATION)); - input.attrs = attrsCopy; - input.mine = true; + input.removeAttribute(LOCATION); } contextWidget = pipeContext.findForm(formJXPath);