1 /*
2 * Copyright (C) 2002 Carsten Krebs (Team-Konzept GmbH & Co.KG)
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 */
18 package com.teamkonzept.dom4jb.schema;
19
20 import java.util.List;
21 import java.util.NoSuchElementException;
22
23 import com.teamkonzept.dom4jb.dom.Document;
24 import com.teamkonzept.dom4jb.dom.Node;
25
26 public class SequenceIterator implements ContentIterator {
27
28 protected final Object obj;
29 protected final Document doc;
30 protected final List group;
31 protected final int groupSize;
32 protected int groupIndex;
33 protected ContentIterator nextIter;
34 protected Node nextNode;
35
36 public SequenceIterator( final List group, final Document doc,
37 final Object obj ) {
38 this.group = group;
39 this.groupSize = group.size();
40 this.groupIndex = 0;
41 this.doc = doc;
42 this.obj = obj;
43
44 this.nextIter = null;
45 this.nextNode = null;
46 }
47
48 public boolean hasNext() {
49 if ( nextNode != null ) {
50 return true;
51 }
52 if ( nextIter != null ) {
53 if ( nextIter.hasNext() ) {
54 nextNode = nextIter.next();
55 return true;
56 }
57 nextIter = null;
58 }
59 if ( groupIndex < groupSize ) {
60 final Groupable next = (Groupable)group.get( groupIndex++ );
61
62 nextIter = next.getContentIterator( doc, obj );
63 if ( nextIter != null ) {
64 return hasNext();
65 }
66 nextNode = next.getContent( doc, obj );
67 }
68 return nextNode != null;
69 }
70
71 public Node next() {
72 if ( nextNode != null || hasNext() ) {
73 final Node node = nextNode;
74 nextNode = null;
75 return node;
76 }
77 throw new NoSuchElementException( "end of sequence reached!" );
78 }
79 }
This page was automatically generated by Maven