/** * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2007 Sun Microsystems Inc. All Rights Reserved * * The contents of this file are subject to the terms * of the Common Development and Distribution License * (the License). You may not use this file except in * compliance with the License. * * You can obtain a copy of the License at * https://opensso.dev.java.net/public/CDDLv1.0.html or * opensso/legal/CDDLv1.0.txt * See the License for the specific language governing * permission and limitations under the License. * * When distributing Covered Code, include this CDDL * Header Notice in each file and include the License file * at opensso/legal/CDDLv1.0.txt. * If applicable, add the following below the CDDL Header, * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * * $Id: LogMessagesFormatter.java,v 1.2 2008/06/25 05:44:12 qcheng Exp $ * */ /** * Portions Copyrighted 2011-2012 ForgeRock Inc */ package com.sun.identity.tools.logdoc; import com.sun.identity.shared.xml.XMLUtils; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.FilenameFilter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.TreeSet; import java.util.Set; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.SAXException; /** * Generate html page for log message IDs. It takes an array of directories * which contains the log message IDs xml files; parses them; and generate * the HTML page. */ public class LogMessagesFormatter { private static FilenameFilter xmlFilter; static String htmlDir = System.getProperty("opensso.log.html.dir"); private List logMessages = new ArrayList(); static { xmlFilter = new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith(".xml"); } }; } private LogMessagesFormatter() { } private LogMessagesFormatter(Set files) throws ParserConfigurationException, SAXException, IOException { for (String fileName : files ) { parseXML(fileName); } generateCSSFiles(); generateHTMLFiles(); } private void generateCSSFiles() throws IOException { writeToFile(LogHtmlTemplate.css_ie5win, "css_ie5win.css"); writeToFile(LogHtmlTemplate.css_ie6up, "css_ie6up.css"); writeToFile(LogHtmlTemplate.css_ns4sol, "css_ns4sol.css"); writeToFile(LogHtmlTemplate.css_ns4win, "css_ns4win.css"); writeToFile(LogHtmlTemplate.css_ns6up, "css_ns6up.css"); writeToFile(LogHtmlTemplate.stylesheetjs, "stylesheet.js"); writeToFile(LogHtmlTemplate.browserjs, "browserVersion.js"); } private void generateHTMLFiles() throws IOException { StringBuilder buff = new StringBuilder(); for (LogMessages lm : logMessages) { String htmlpage = lm.getName() + ".html"; String link = LogHtmlTemplate.indexLink.replaceAll( "@htmlpage@", htmlpage); link = link.replaceAll("@name@", lm.getName()); buff.append(link); lm.generateHTMLFile(); } String indexPage = LogHtmlTemplate.indexPage.replaceAll("@indices@", buff.toString()); writeToFile(indexPage, "index.html"); } static void writeToFile(String content, String fileName) throws IOException { BufferedWriter out = null; try { out = new BufferedWriter(new FileWriter( htmlDir + "/" + fileName)); out.write(content); } finally { if (out != null) { out.close(); } } } private void parseXML(String fileName) throws ParserConfigurationException, SAXException, IOException { String xml = stripDocType(fileName); ByteArrayInputStream bis = null; try { bis = new ByteArrayInputStream(xml.getBytes()); DocumentBuilder db = XMLUtils.getSafeDocumentBuilder(false); Document dom = db.parse(bis); Element rootElm = dom.getDocumentElement(); logMessages.add(new LogMessages(fileName, rootElm)); } finally { if (bis != null) { bis.close(); } } } private static String stripDocType(String fileName) throws IOException { BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(new File(fileName))); StringBuilder buff = new StringBuilder(); String line = reader.readLine(); while (line != null) { buff.append(line); line = reader.readLine(); } return buff.toString().replaceAll("", ""); } finally { if (reader != null){ reader.close(); } } } /** * Takes an array of directories where message IDs xml resides. * * @param args Array of directories where message IDs xml resides. */ public static void main(String[] args) { try { Set files = new TreeSet(); for (int i = 0; i < args.length; i++) { getXMLFiles(args[i], files); } new LogMessagesFormatter(files); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static void getXMLFiles(String dir, Set files) throws IOException { File directory = new File(dir); String[] children = directory.list(xmlFilter); if (children != null) { for (int i= 0; i < children.length; i++) { files.add(dir + "/" + children[i]); } } } }