/* * Sonar PDF Report (Maven plugin) * Copyright (C) 2010 klicap - ingenieria del puzle * dev@sonar.codehaus.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 */ package org.sonar.report.pdf.entity; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.dom4j.Document; import org.dom4j.Node; public class FileInfo { /** * Sonar resource key. */ private String key; /** * Resource name (filename). */ private String name; /** * Number of violations ins this resource (file). */ private String violations; /** * Class complexity. */ private String complexity; /** * Duplicated lines in this resource (file) */ private String duplicatedLines; /** * XPATH */ private static final String ALL_FILES = "/resources/resource"; private static final String KEY = "key"; private static final String NAME = "name"; private static final String VIOLATIONS_NUMBER = "msr/frmt_val"; private static final String CCN = "msr/frmt_val"; private static final String DUPLICATED_LINES = "msr/frmt_val"; /** * It defines the content of this object: used for violations info, complexity info or duplications info. */ public static final int VIOLATIONS_CONTENT = 1; public static final int CCN_CONTENT = 2; public static final int DUPLICATIONS_CONTENT = 3; /** * A FileInfo object could contain information about violations, ccn or duplications, this cases are distinguished in * function of content param, and defined by project context. * * @param fileNode DOM Node that contains file info * @param content Type of content */ public void initFromNode(Node fileNode, int content) { this.setKey(fileNode.selectSingleNode(KEY).getText()); this.setName(fileNode.selectSingleNode(NAME).getText()); if (content == VIOLATIONS_CONTENT) { this.setViolations(fileNode.selectSingleNode(VIOLATIONS_NUMBER).getText()); } else if (content == CCN_CONTENT) { this.setComplexity(fileNode.selectSingleNode(CCN).getText()); } else if (content == DUPLICATIONS_CONTENT) { this.setDuplicatedLines(fileNode.selectSingleNode(DUPLICATED_LINES).getText()); } } public static List<FileInfo> initFromDocument(Document filesDocument, int content) { List<Node> fileNodes = filesDocument.selectNodes(ALL_FILES); List<FileInfo> fileInfoList = new LinkedList<FileInfo>(); if (fileNodes != null) { Iterator<Node> it = fileNodes.iterator(); while (it.hasNext()) { FileInfo file = new FileInfo(); Node fileNode = it.next(); // This first condition is a workarround for SONAR-830 if (fileNode.selectSingleNode("msr") != null) { file.initFromNode(fileNode, content); if (file.isContentSet(content)) { fileInfoList.add(file); } } } } return fileInfoList; } public boolean isContentSet(int content) { boolean result = false; if (content == VIOLATIONS_CONTENT) { result = !this.getViolations().equals("0"); } else if (content == CCN_CONTENT) { result = !this.getComplexity().equals("0"); } else if (content == DUPLICATIONS_CONTENT) { result = !this.getDuplicatedLines().equals("0"); } return result; } public String getKey() { return key; } public String getViolations() { return violations; } public String getComplexity() { return complexity; } public String getName() { return name; } public void setKey(String key) { this.key = key; } public void setViolations(String violations) { this.violations = violations; } public void setComplexity(String complexity) { this.complexity = complexity; } public void setName(String name) { this.name = name; } public String getDuplicatedLines() { return duplicatedLines; } public void setDuplicatedLines(String duplicatedLines) { this.duplicatedLines = duplicatedLines; } }