/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.cpd; import net.sourceforge.pmd.PMD; import net.sourceforge.pmd.util.StringUtil; import java.util.Iterator; /** * @author Philippe T'Seyen */ public class XMLRenderer implements Renderer { public String render(Iterator matches) { StringBuffer buffer = new StringBuffer(); buffer.append("<?xml version=\"1.0\"?>"); buffer.append("<pmd-cpd>"); for (;matches.hasNext();) { Match match = (Match) matches.next(); buffer.append("<duplication"); buffer.append(" lines=\""); buffer.append(match.getLineCount()); buffer.append("\""); buffer.append(" tokens=\""); buffer.append(match.getTokenCount()); buffer.append("\">"); for (Iterator iterator = match.iterator(); iterator.hasNext();) { TokenEntry mark = (TokenEntry) iterator.next(); buffer.append("<file"); buffer.append(" line=\""); buffer.append(mark.getBeginLine()); buffer.append("\""); buffer.append(" path=\""); buffer.append(mark.getTokenSrcID()); buffer.append("\"/>"); } String codeFragment = match.getSourceCodeSlice(); if (codeFragment != null) { buffer.append("<codefragment><![CDATA[" + PMD.EOL + StringUtil.replaceString(codeFragment, "]]>", "]]>") + PMD.EOL + "]]></codefragment>"); } buffer.append("</duplication>"); } buffer.append("</pmd-cpd>"); return buffer.toString(); } }