import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
* @author Akram Ben Aissi
*
*/
public class CSVRulesToSonarProfile {
/**
* @param args
* @throws IOException
*/
public static void generateSonarProfileXml(String inputFile, String outputFile) throws IOException {
InputStream stream = new FileInputStream(inputFile);
InputStreamReader streamReader = new InputStreamReader(stream);
BufferedReader reader = new BufferedReader(streamReader);
FileOutputStream out = new FileOutputStream(outputFile);
BufferedOutputStream output = new BufferedOutputStream(out);
String line = reader.readLine();
/*
* <rule priority="BLOCKER"> <key>Code Size Rules/ExcessiveClassLength</key> <repositoryKey>php_codesniffer_rules</repositoryKey>
* <category name="Maintainability" /> <name>ExcessiveClassLength</name> <configKey>Code Size Rules/ExcessiveClassLength</configKey>
* <description>:message</description> </rule>
*/
StringBuilder buffer = new StringBuilder("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><profile>");
buffer.append("<name>PHP_CodeSniffer rules</name><language>php</language><rules>");
// first line contains colum, so we skip it.
line = reader.readLine();
line = reader.readLine();
while (line != null) {
String[] tokens = line.split(",");
buffer.append("<rule priority=\"").append(tokens[1]).append("\">");
buffer.append("<key>").append(tokens[0]).append("</key>\n");
buffer.append("<repositoryKey>php_codesniffer_rules</repositoryKey>\n");
buffer.append("<category name=\"").append(tokens[2]).append("\" />");
buffer.append("<name>").append(tokens[3]).append("</name>");
buffer.append("<configKey>").append(tokens[4]).append("</configKey>");
String description = tokens[3];
if (tokens.length > 5) {
description = tokens[5];
if (description.startsWith("\"")) {
description = description.substring(1);
}
if (description.endsWith("\"")) {
description = description.substring(0, description.length() - 1);
}
}
buffer.append("<description>");
buffer.append("<![CDATA[").append(description).append("]]>");
buffer.append("</description>");
buffer.append("</rule>\n");
line = reader.readLine();
}
buffer.append("</rules></profile>");
output.write(buffer.toString().getBytes());
output.close();
}
}