Clover Coverage Report - XWiki Rendering - Parent POM 4.0-SNAPSHOT (Aggregated)
Coverage timestamp: Mon Mar 12 2012 18:03:13 CET
../../../../../../img/srcFileCovDistChart9.png 55% of files have more coverage
16   134   6   3.2
0   74   0.38   5
5     1.2  
1    
 
  XWikiParser       Line # 55 16 0% 6 3 85.7% 0.85714287
 
  (92)
 
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.internal.parser.xwiki10;
21   
22    import java.io.IOException;
23    import java.io.Reader;
24    import java.io.StringReader;
25    import java.util.Collections;
26    import java.util.Comparator;
27    import java.util.List;
28   
29    import javax.inject.Inject;
30    import javax.inject.Named;
31    import javax.inject.Singleton;
32   
33    import org.apache.commons.io.IOUtils;
34    import org.xwiki.component.annotation.Component;
35    import org.xwiki.component.phase.Initializable;
36    import org.xwiki.component.phase.InitializationException;
37    import org.xwiki.rendering.block.XDOM;
38    import org.xwiki.rendering.parser.ParseException;
39    import org.xwiki.rendering.parser.Parser;
40    import org.xwiki.rendering.syntax.Syntax;
41    import org.xwiki.rendering.syntax.SyntaxType;
42    import org.xwiki.rendering.parser.xwiki10.Filter;
43    import org.xwiki.rendering.parser.xwiki10.FilterContext;
44    import org.xwiki.rendering.parser.xwiki10.util.CleanUtil;
45   
46    /**
47    * Convert XWiki 1.0 content into 2.0 content and call XWiki 2.0 parser to generate the XDOM.
48    *
49    * @version $Id: b8abbb7c148d57ba51e19af6942160b08d6f6c06 $
50    * @since 1.8M1
51    */
52    @Component
53    @Named("xwiki/1.0")
54    @Singleton
 
55    public class XWikiParser implements Parser, Initializable
56    {
57    /**
58    * The syntax identifier of the parser.
59    */
60    private static final Syntax SYNTAX = new Syntax(SyntaxType.XWIKI, "1.0");
61   
62    /**
63    * Use to create the XDOM from converted content.
64    */
65    @Inject
66    @Named("xwiki/2.0")
67    private Parser xwiki20Parser;
68   
69    /**
70    * The filters use to convert 1.0 content to 2.0.
71    */
72    @Inject
73    private List<Filter> filters;
74   
 
75  92 toggle @Override
76    public void initialize() throws InitializationException
77    {
78    // order filters
79  92 Collections.sort(this.filters, new Comparator<Filter>()
80    {
 
81  7452 toggle @Override
82    public int compare(Filter filter1, Filter filter2)
83    {
84  7452 return filter1.getPriority() - filter2.getPriority();
85    }
86    });
87    }
88   
 
89  0 toggle @Override
90    public Syntax getSyntax()
91    {
92  0 return SYNTAX;
93    }
94   
 
95  92 toggle @Override
96    public XDOM parse(Reader source) throws ParseException
97    {
98    // Convert from 1.0 syntax to 2.0 syntax
99  92 String content20 = xwiki10To20(source);
100   
101    // Generate the XDOM using 2.0 syntax parser
102  92 return this.xwiki20Parser.parse(new StringReader(content20));
103    }
104   
105    /**
106    * Convert XWiki 1.0 content to 2.0.
107    *
108    * @param source the 1.0 source.
109    * @return the 2.0 converted content.
110    * @throws ParseException error when converting content.
111    */
 
112  92 toggle public String xwiki10To20(Reader source) throws ParseException
113    {
114  92 String content;
115  92 try {
116  92 content = IOUtils.toString(source);
117    } catch (IOException e) {
118  0 throw new ParseException("Failed to read source", e);
119    }
120   
121  92 FilterContext filterContext = new FilterContext();
122   
123  92 for (Filter filter : this.filters) {
124  2116 content = filter.filter(content, filterContext);
125    }
126   
127  92 content = filterContext.unProtect(content);
128   
129  92 content = CleanUtil.removeLeadingNewLines(content);
130  92 content = CleanUtil.removeTrailingNewLines(content);
131   
132  92 return content;
133    }
134    }