8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Copyright (c) 2007 Sun Microsystems Inc. All Rights Reserved
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * The contents of this file are subject to the terms
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * of the Common Development and Distribution License
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * (the License). You may not use this file except in
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * compliance with the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * You can obtain a copy of the License at
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * opensso/legal/CDDLv1.0.txt
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * See the License for the specific language governing
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * permission and limitations under the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * When distributing Covered Code, include this CDDL
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Header Notice in each file and include the License file
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * at opensso/legal/CDDLv1.0.txt.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * If applicable, add the following below the CDDL Header,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * with the fields enclosed by brackets [] replaced by
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * your own identifying information:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * $Id: LogMessages.java,v 1.2 2008/06/25 05:44:12 qcheng Exp $
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/*
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Portions Copyrighted [2011] [ForgeRock AS]
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpackage com.sun.identity.tools.logdoc;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.io.IOException;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.ArrayList;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.List;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport javax.xml.parsers.ParserConfigurationException;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport org.w3c.dom.Element;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport org.w3c.dom.NodeList;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport org.xml.sax.SAXException;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Log Message IDs. It parses a Document Object Model of message IDs xml and
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * generates the HTML page.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpublic class LogMessages {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String name;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String prefix;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private List<LogMessage> messages = new ArrayList<LogMessage>();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private LogMessages() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster LogMessages(String fileName, Element root)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throws ParserConfigurationException, SAXException, IOException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster name = getDisplayName(fileName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster prefix = root.getAttribute("prefix");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster NodeList children = root.getElementsByTagName("logmessage");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int sz = children.getLength();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < sz; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster messages.add(new LogMessage((Element)children.item(i)));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String getName() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return name;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster void generateHTMLFile()
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throws IOException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String page = LogHtmlTemplate.page.replaceAll("@NAME@", name);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster page = page.replaceAll("@ID_OPTIONS@", getOptions());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster page = page.replaceAll("@messages@", getMessagesHtml());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster LogMessagesFormatter.writeToFile(page, name + ".html");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String getOptions() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster StringBuilder buff = new StringBuilder();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (LogMessage m : messages) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buff.append(LogHtmlTemplate.option.replaceAll("@id@",
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster prefix + "-" + m.getID()));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return buff.toString();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String getMessagesHtml() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster StringBuilder buff = new StringBuilder();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (LogMessage m : messages) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buff.append(m.getHTML(prefix));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return buff.toString();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String getDisplayName(String fileName) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int idx = fileName.lastIndexOf('/');
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (idx != -1) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster fileName = fileName.substring(idx+1);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster idx = fileName.indexOf(".xml");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (idx != -1) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster fileName = fileName.substring(0, idx);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return fileName;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster class LogMessage {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String name;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String id;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String description;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String level;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private List<String> datainfos = new ArrayList<String>();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private List<String> triggers = new ArrayList<String>();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private List<String> actions = new ArrayList<String>();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster LogMessage(Element elm) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster name = elm.getAttribute("name");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster id = elm.getAttribute("id");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster description = elm.getAttribute("description");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster level = elm.getAttribute("loglevel");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (level.startsWith("LL_")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster level = level.substring(3);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getItems(elm, "datainfo", datainfos);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getItems(elm, "triggers", triggers);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getItems(elm, "actions", actions);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String getID() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return id;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String getHTML(String prefix) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String html = LogHtmlTemplate.logmessage.replaceAll("@id@",
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster prefix + "-" + id);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster html = html.replaceAll("@level@", level);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster html = html.replaceAll("@description@", description);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster html = html.replaceAll("@datainfos@", listToString(datainfos));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster html = html.replaceAll("@triggers@", listToString(triggers));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster html = html.replaceAll("@actions@", listToString(actions));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return html;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String listToString(List<String> list) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (list.isEmpty()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return "&nbsp;";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster StringBuilder buff = new StringBuilder();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (String s : list) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buff.append(s).append("<br />");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return buff.toString();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private void getItems(Element elm, String name, List<String> list) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster NodeList children = elm.getElementsByTagName(name);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (children.getLength() > 0) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Element node = (Element)children.item(0);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster NodeList iter = node.getElementsByTagName("item");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int sz = iter.getLength();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < sz; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Element x = (Element)iter.item(i);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster list.add(x.getFirstChild().getNodeValue());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster}
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster