+1 On Thu, Jun 4, 2009 at 16:17, Vincent Massol <[email protected]> wrote: > Hi, > > Following the previously aborted vote, here's a new proposal. The > problem with the current implementation is that you cannot write: > > for (LinkBlock block : xdom.getChildrenByType(LinkBlock.class, true)) { > Block newBlock = new > FormatBlock(Collections.<Block>singletonList(block), Format.ITALIC); > block.replace(newBlock); > } > > This fails because when the "block" is added in FormatBlock, its > parent is set to be the FormatBlock and thus when block.replace() > executes the parent of the new block is set to be the format block > instead of its parent. > > I thus propose an API that is inline with the w3c DOM API: > > /** > * Replaces an existing children block with the passed new block. > * Also sets the new block's parent to be the current block. > * > * @param newBlock the new block to replace the old block with > */ > void replaceChild(Block newBlock, Block oldBlock); > > /** > * Replaces an existing children block with the passed new blocks. > * Also sets the new block's parents to be the current block. > * > * @param newBlocks the new blocks to replace the old block with > */ > void replaceChild(List<Block> newBlocks, Block oldBlock); > > > Note for Sergiu (before he asks ;)): > - We had evaluated using either the w3c Node API or the JCR Node API > before we created our own Block API. > - We cannot use the w3c Node interface since it contains too many > references to XML (like CDATA, ProcessingInstruction, etc) > - We cannot use the JCR Node API since it's too complex and contains > references to mixins, etc. > > Here's my +1 > > Thanks > -Vincent > > _______________________________________________ > devs mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/devs >
-- Thomas Mortagne _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

