On 02/10/2011 07:27 PM, Thomas Mortagne wrote:
> Here is a proposal to reduce all get...Block to 2 methods which
> support matching any Block.
>
> interface Block
> {
>    enum TraversalStrategy
>    {
>      /** Search in parents **/
>      PARENT,
>      /** Search in children **/
>      CHILD,
>      /** Search recursively in children (and children of children etc...) **/
>      CHILDRECURSE,
>      /** Search in previous siblings **/
>      PREVIOUS,
>      /** Search recursively in previous siblings (and parent previous
> sibling etc...) **/
>      PREVIOUSRECURSE,
>      /** Search in next siblings**/
>      NEXT,
>      /** Search recursively in next siblings (and children etc...)**/
>      NEXTRECURSE
>    }
>
>    [...]
>
>    List<Block>  getBlocks(BlockMatcher matcher, TraversalStrategy
> traversalStrategy, boolean recurse);
>
>    Block getFirstBlock(BlockMatcher matcher, TraversalStrategy
> traversalStrategy, boolean recurse);
> }
>
> interface BlockMatcher
> {
>      boolean match(Block block);
> }
>
> et on refactor tous les autres get*Block basé sur ceux la avec des
> BlockMatcher prédéfinis (ClassBlockMatcher, MetaDataBlockMatcher,
> etc...).
>
> Note: the main use case for this change is to support MetaData search.
>
> WDYT (especially on the vocabulary like "TraversalStrategy") ?

Have you considered replacing get...Block methods with Block iterators?

Iterator<Block> iterator = new MetaDataIterator(new 
ChildrenIterator(parent));

Hope this helps,
Marius
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to