View Javadoc

1   /***
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3   */
4   package net.sourceforge.pmd.cpd;
5   
6   import net.sourceforge.pmd.PMD;
7   import net.sourceforge.pmd.util.StringUtil;
8   
9   import java.util.Iterator;
10  
11  /***
12   * @author  Philippe T'Seyen
13   */
14  public class XMLRenderer implements Renderer
15  {
16    public String render(Iterator matches)
17    {
18      StringBuffer buffer = new StringBuffer();
19      buffer.append("<?xml version=\"1.0\"?>");
20      buffer.append("<pmd-cpd>");
21      for (;matches.hasNext();)
22      {
23        Match match = (Match) matches.next();
24        buffer.append("<duplication");
25        buffer.append(" lines=\"");
26        buffer.append(match.getLineCount());
27        buffer.append("\"");
28        buffer.append(" tokens=\"");
29        buffer.append(match.getTokenCount());
30        buffer.append("\">");
31  
32        for (Iterator iterator = match.iterator(); iterator.hasNext();)
33        {
34          TokenEntry mark = (TokenEntry) iterator.next();
35          buffer.append("<file");
36          buffer.append(" line=\"");
37          buffer.append(mark.getBeginLine());
38          buffer.append("\"");
39          buffer.append(" path=\"");
40          buffer.append(mark.getTokenSrcID());
41          buffer.append("\"/>");
42        }
43        String codeFragment = match.getSourceCodeSlice();
44        if (codeFragment != null)
45        {
46          buffer.append("<codefragment><![CDATA[" + PMD.EOL + StringUtil.replaceString(codeFragment, "]]>", "]]&gt;") + PMD.EOL + "]]></codefragment>");
47        }
48        buffer.append("</duplication>");
49      }
50      buffer.append("</pmd-cpd>");
51      return buffer.toString();
52    }
53  }