Clover Coverage Report - XWiki Rendering - Parent POM 4.0-SNAPSHOT (Aggregated)
Coverage timestamp: Mon Mar 12 2012 18:03:13 CET
../../../../../img/srcFileCovDistChart10.png 0% of files have more coverage
43   195   25   2.26
12   130   0.58   9.5
19     1.32  
2    
 
  SectionBuilder       Line # 31 33 0% 19 0 100% 1.0
  SectionBuilder.TocEntry       Line # 33 10 0% 6 0 100% 1.0
 
  (967)
 
1    /*
2    * See the NOTICE file distributed with this work for additional
3    * information regarding copyright ownership.
4    *
5    * This is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU Lesser General Public License as
7    * published by the Free Software Foundation; either version 2.1 of
8    * the License, or (at your option) any later version.
9    *
10    * This software is distributed in the hope that it will be useful,
11    * but WITHOUT ANY WARRANTY; without even the implied warranty of
12    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13    * Lesser General Public License for more details.
14    *
15    * You should have received a copy of the GNU Lesser General Public
16    * License along with this software; if not, write to the Free
17    * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
18    * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
19    */
20    package org.xwiki.rendering.wikimodel.util;
21   
22    import java.util.ArrayList;
23    import java.util.Collections;
24    import java.util.List;
25    import java.util.Stack;
26   
27    /**
28    * @version $Id: 01a582957a6c5dea76a8a177ee00ea61613b8e8f $
29    * @since 4.0M1
30    */
 
31    public class SectionBuilder<T>
32    {
 
33    protected class TocEntry implements TreeBuilder.IPos<TocEntry>,
34    ISectionListener.IPos<T>
35    {
36    T fData;
37   
38    protected boolean fDoc;
39   
40    protected boolean fHeader;
41   
42    int fDocLevel;
43   
44    int fLevel;
45   
 
46  4001 toggle public TocEntry(int docLevel, int level, T data, boolean doc,
47    boolean header)
48    {
49  4001 fDocLevel = docLevel;
50  4001 fLevel = level;
51  4001 fData = data;
52  4001 fDoc = doc;
53  4001 fHeader = header;
54    }
55   
 
56  673 toggle public boolean equalsData(TocEntry pos)
57    {
58  673 return true;
59    }
60   
 
61  19982 toggle public T getData()
62    {
63  19982 return fData;
64    }
65   
 
66  13630 toggle public int getDocumentLevel()
67    {
68  13630 return fDocLevel;
69    }
70   
 
71  14390 toggle public int getHeaderLevel()
72    {
73  14390 return fLevel;
74    }
75   
 
76  1346 toggle public int getPos()
77    {
78  1346 return fDocLevel * 10 + fLevel + 1;
79    }
80    }
81   
82    Stack<TreeBuilder<TocEntry>> fBuilder = new Stack<TreeBuilder<TocEntry>>();
83   
84    private Stack<TocEntry> fDocEntries = new Stack<TocEntry>();
85   
86    ISectionListener<T> fListener;
87   
 
88  2620 toggle public SectionBuilder(ISectionListener<T> listener)
89    {
90  2620 fListener = listener;
91    }
92   
 
93  2802 toggle private void pushBuilder()
94    {
95  2802 fBuilder.push(new TreeBuilder<TocEntry>(
96    new TreeBuilder.ITreeListener<TocEntry>()
97    {
 
98  3404 toggle public void onBeginRow(TocEntry n)
99    {
100  3404 if (!n.fDoc) {
101  602 fListener.beginSection(n);
102  602 if (n.fHeader) {
103  393 fListener.beginSectionHeader(n);
104    } else {
105  209 fListener.beginSectionContent(n);
106    }
107    }
108    }
109   
 
110  3328 toggle public void onBeginTree(TocEntry n)
111    {
112  3328 if (n.fDoc) {
113  2802 fListener.beginDocument(n);
114    }
115    }
116   
 
117  3404 toggle public void onEndRow(TocEntry n)
118    {
119  3404 if (!n.fDoc) {
120  602 fListener.endSectionContent(n);
121  602 fListener.endSection(n);
122    }
123    }
124   
 
125  3328 toggle public void onEndTree(TocEntry n)
126    {
127  3328 if (n.fDoc) {
128  2802 fListener.endDocument(n);
129    }
130    }
131    }));
132    }
133   
 
134  2802 toggle private TreeBuilder<TocEntry> popBuilder()
135    {
136  2802 return fBuilder.pop();
137    }
138   
139    /**
140    * @param docLevel
141    * @param level
142    * @param data
143    * @param b
144    * @return
145    */
 
146  3195 toggle private TocEntry align(int docLevel, int level, T data, boolean doc)
147    {
148  3195 TocEntry entry = null;
149  3195 List<TocEntry> entries = new ArrayList<TocEntry>();
150  7196 for (int i = 0; i <= level; ++i) {
151  4001 entry = new TocEntry(docLevel, i, data, doc, i == level);
152  4001 entries.add(entry);
153    }
154  3195 fBuilder.peek().align(entries);
155   
156  3195 return entry;
157    }
158   
 
159  2802 toggle public void beginDocument(T data)
160    {
161  2802 pushBuilder();
162   
163  2802 TocEntry entry = align(getDocLevel() + 1, 0, data, true);
164   
165  2802 fDocEntries.push(entry);
166    }
167   
 
168  393 toggle public void beginHeader(int level, T data)
169    {
170  393 int docLevel = getDocLevel();
171  393 align(docLevel, level, data, false);
172    }
173   
 
174  2802 toggle public void endDocument()
175    {
176  2802 fDocEntries.pop();
177   
178  2802 popBuilder().align(Collections.<TocEntry>emptyList());
179    }
180   
 
181  393 toggle public void endHeader()
182    {
183  393 TocEntry entry = fBuilder.peek().getPeek();
184  393 fListener.endSectionHeader(entry);
185  393 fListener.beginSectionContent(entry);
186    }
187   
188    /**
189    * @return
190    */
 
191  3195 toggle private int getDocLevel()
192    {
193  3195 return fDocEntries.size();
194    }
195    }