import java.io.*; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class GenerateProtexScanDashboard { private static void usage() { System.out.println("Input Parameters:" ); System.out.println("Folder path\\name - Location and folder name where all scan results xml files are stored\n" + "File path\\name - location and filename to store the dashboard summary html report "); System.out.println(""); } public String getAllScanResult(File file) { try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); int number; //File file = new File(fileName); //System.out.println("Exists: " + file.getName() + " " + file.exists()); if (file.exists()) { Document doc = db.parse(file); //System.out.println("File: " + fileName); //System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); //System.out.println("Root element attrib :" + doc.getDocumentElement().getAttribute("name")); NodeList serverList = doc.getElementsByTagName("ServerUrl"); Node serverUrlNode = serverList.item(0); Element serverUrlElement = (Element) serverUrlNode; //System.out.println("Server url: " + serverUrlElement.getTextContent()); NodeList analyzedTimeList = doc.getElementsByTagName("LastAnalyzed"); Node anaTimeNode = analyzedTimeList.item(0); Element anaTimeElement = (Element) anaTimeNode; //System.out.println("ANAly Time: " + anaTimeElement.getTextContent()); NodeList analyzedList = doc.getElementsByTagName("Analyzed"); Node anaNode = analyzedList.item(0); Element anaElement = (Element) anaNode; //System.out.println("ANAly : " + anaElement.getTextContent()); NodeList pendingList = doc.getElementsByTagName("PendingID"); Node penNode = pendingList.item(0); Element penElement = (Element) penNode; //System.out.println("Pending : " + penElement.getTextContent()); NodeList totCompList = doc.getElementsByTagName("TotalComponents"); Node tCompNode = totCompList.item(0); Element tCompElement = (Element) tCompNode; //System.out.println("total Comp : " + tCompElement.getTextContent()); NodeList totLicList = doc.getElementsByTagName("TotalLicenses"); Node tLicNode = totLicList.item(0); Element tLicElement = (Element) tLicNode; //System.out.println("Tot Lic : " + tLicElement.getTextContent()); NodeList pendingRevList = doc.getElementsByTagName("PendingReview"); Node penRevNode = pendingRevList.item(0); Element penRevElement = (Element) penRevNode; //System.out.println("Pending Rev: " + penRevElement.getTextContent()); NodeList licVioList = doc.getElementsByTagName("LicenseViolations"); Node licVioNode = licVioList.item(0); Element licVioElement = (Element) licVioNode; //System.out.println("Lice Violati : " + licVioElement.getTextContent()); String prj_str = "" + doc.getDocumentElement().getAttribute("name") + "" + "" + anaTimeElement.getTextContent() + "" + "" + anaElement.getTextContent() + ""; number = Integer.parseInt(penElement.getTextContent()); if (number > 0) prj_str = prj_str + " " + penElement.getTextContent() + ""; else prj_str = prj_str + "" + penElement.getTextContent() + ""; prj_str = prj_str + "" + tCompElement.getTextContent() + "" + "" + tLicElement.getTextContent() + ""; number = Integer.parseInt(penRevElement.getTextContent()); if (number > 0) prj_str = prj_str + " " + penRevElement.getTextContent() + ""; else prj_str = prj_str + "" + penRevElement.getTextContent() + ""; number = Integer.parseInt(licVioElement.getTextContent()); if (number > 0) prj_str = prj_str + " " + licVioElement.getTextContent() + ""; else prj_str = prj_str + "" + licVioElement.getTextContent() + ""; // prj_str = prj_str + "COS Report"; return prj_str; } } catch (Exception e) { System.out.println(e); } return "Error!! Parsing XML reports"; } public static void main(String[] args) { if (args.length < 2) { System.err.println("Not enough parameters!"); usage(); System.exit(-1); } GenerateProtexScanDashboard parser = new GenerateProtexScanDashboard(); String filename; File folder = new File( args[0] ); File[] listOfFiles = folder.listFiles(); String html_content = ""; String OSName = null; String delimiter = null; OSName = System.getProperty("os.name"); if (OSName.contains("Windows")) delimiter = "\\"; else delimiter = "/"; for (int i = 0; i < listOfFiles.length; i++) { if (listOfFiles[i].isFile()) { filename = folder.getPath() + delimiter + listOfFiles[i].getName(); //System.out.println("File: " + filename); if (filename.endsWith(".xml") || filename.endsWith(".XML")) { File filehandle = new File(filename); String prj_str = parser.getAllScanResult( filehandle ); html_content = html_content + prj_str; } } } File f = new File(args[1]); try { BufferedWriter bw = new BufferedWriter(new FileWriter(f)); bw.write( "" + "

Protex Scan Summary

" + "" + "" + "" + "" + "" + "" // + "" + "" + "" + "" + "" + "" + "" + "" + html_content + "
Protex Project Last Scan Timestamp Files BOM Detailed Summary
Analyzed Pending Components NumLicense PendingReview LicenseViolations
" ) ; bw.close(); } catch (Exception e) { System.out.println(e); } } }