Path: blob/master/sourcetools/j9nls/com/ibm/oti/NLSTool/NLSHtmlGenerator.java
6004 views
/*******************************************************************************1* Copyright (c) 2004, 2017 IBM Corp. and others2*3* This program and the accompanying materials are made available under4* the terms of the Eclipse Public License 2.0 which accompanies this5* distribution and is available at https://www.eclipse.org/legal/epl-2.0/6* or the Apache License, Version 2.0 which accompanies this distribution and7* is available at https://www.apache.org/licenses/LICENSE-2.0.8*9* This Source Code may also be made available under the following10* Secondary Licenses when the conditions for such availability set11* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU12* General Public License, version 2 with the GNU Classpath13* Exception [1] and GNU General Public License, version 2 with the14* OpenJDK Assembly Exception [2].15*16* [1] https://www.gnu.org/software/classpath/license.html17* [2] http://openjdk.java.net/legal/assembly-exception.html18*19* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception20*******************************************************************************/21package com.ibm.oti.NLSTool;2223import java.io.File;24import java.io.FileNotFoundException;25import java.io.FileWriter;26import java.io.IOException;27import java.util.Collections;28import java.util.Enumeration;29import java.util.Vector;3031public class NLSHtmlGenerator {32private File htmlFile;33private FileWriter htmlWriter;3435public void generateHTML(Vector nlsInfos, String outFileName, String htmlFileName) throws IOException, FileNotFoundException {36Collections.sort(nlsInfos);37htmlFile = new File(htmlFileName);38StringBuffer buffer = new StringBuffer("");3940writeHTMLHeader(buffer, outFileName);41writeIndexTable(nlsInfos, buffer);42buffer.append("<br>");43writeMsgTable(nlsInfos, buffer);44writeHTMLFooter(buffer);4546if (J9NLS.differentFromCopyOnDisk(htmlFileName, buffer)) {47htmlWriter = new FileWriter(htmlFile);48htmlWriter.write(buffer.toString());49htmlWriter.close();5051J9NLS.dp("** Generated " + htmlFile.getAbsolutePath());52}53}5455private void writeIndexTable(Vector nlsInfos, StringBuffer buffer) {56buffer.append("<table border=\"1\" width=\"100%\" cellpadding=\"5\" cellspacing=\"0\">\n");57buffer.append("<colgroup span=\"4\"</colgroup>\n");58buffer.append("<tr>");59buffer.append("<td>Module Name</td>\n");60buffer.append("<td>Path</td>\n");61buffer.append("<td>Header Name</td>\n");62buffer.append("<td>Locales</td>\n");63buffer.append("</tr>\n");64for(Enumeration enumer = nlsInfos.elements(); enumer.hasMoreElements(); ) {65NLSInfo nlsInfo = (NLSInfo)enumer.nextElement();66Vector locales = sortLocales(nlsInfo.getLocales());67buffer.append("<tr>\n");68buffer.append("<td>");69buffer.append("<a href=\"#" + nlsInfo.getModule() + "\">\n");70buffer.append(nlsInfo.getModule() + "</a></td>\n");71buffer.append("<td>" + nlsInfo.getPath() + "</td>\n");72buffer.append("<td>" + nlsInfo.getHeaderName() + "</td>\n");73buffer.append("<td>\n");74for(Enumeration e = locales.elements(); e.hasMoreElements(); ) {75String temp = (String)e.nextElement();76String locale = getLocale(temp);77buffer.append(locale);78if(e.hasMoreElements())79buffer.append(", ");80}81buffer.append("</td>\n");82buffer.append("</tr>\n\n");83}84buffer.append("</table>");85}8687private void writeMsgTable(Vector nlsInfos, StringBuffer buffer) {88buffer.append("<table border=\"1\" width=\"100%\" cellpadding=\"5\" cellspacing=\"0\">\n");89buffer.append("<colgroup span=\"4\"</colgroup>\n");90buffer.append("<tr>");91buffer.append("<td>Macro</td>\n");92buffer.append("<td>ID</td>\n");93buffer.append("<td>Key</td>\n");94buffer.append("<td>Message</td>\n");95buffer.append("</tr>\n\n");96for(Enumeration enumer = nlsInfos.elements(); enumer.hasMoreElements(); ) {97NLSInfo nlsInfo = (NLSInfo)enumer.nextElement();98Vector msgInfos = nlsInfo.getMsgInfo();99boolean firstMessage = true;100for(Enumeration e = msgInfos.elements(); e.hasMoreElements(); ) {101MsgInfo msgInfo = (MsgInfo)e.nextElement();102writeMsgTable(msgInfo, buffer, firstMessage);103firstMessage = false;104}105}106buffer.append("</table>\n");107}108109private void writeMsgTable(MsgInfo msgInfo, StringBuffer buffer, boolean firstMessage) {110buffer.append("<tr>\n");111buffer.append("<td>" + msgInfo.getMacro() + "</td>\n");112buffer.append("<td>" + msgInfo.getId() + "</td>\n");113buffer.append("<td>" + msgInfo.getKey() + "</td>\n");114115buffer.append("<td>");116if(firstMessage)117buffer.append("<a name=" + msgInfo.getMacro().substring(0,4) + ">");118if(msgInfo.getMsg().equals(""))119buffer.append("<i>No Value</i>");120else121buffer.append("<xmp>" + msgInfo.getMsg() + "</xmp>");122123if (msgInfo.containsDiagnostics()) {124buffer.append("<p><b>Explanation: </b>" + msgInfo.getExplanation());125buffer.append("<p><b>System Action: </b>" + msgInfo.getSystemAction());126buffer.append("<p><b>User Response: </b>" + msgInfo.getUserResponse());127}128129if(firstMessage)130buffer.append("</a>");131buffer.append("</td>\n");132buffer.append("</tr>\n\n");133}134135private void writeHTMLHeader(StringBuffer buffer, String outFileName) {136buffer.append("<html>\n");137buffer.append("<head>\n");138buffer.append("<title>");139buffer.append(outFileName);140buffer.append("</title>\n");141buffer.append("</head>\n");142buffer.append("<body bgcolor=\"#C0C0C0\" link=black vlink=blue>");143}144145private void writeHTMLFooter(StringBuffer buffer) {146buffer.append("</body>\n");147buffer.append("</html>");148}149150private Vector sortLocales(Vector locales) {151Vector sortedLocales = new Vector();152if(locales.contains("")) {153sortedLocales.addElement("");154locales.remove("");155}156Collections.sort(locales);157sortedLocales.addAll(locales);158return sortedLocales;159}160161private String getLocale(String nlsFileName) {162if(nlsFileName.lastIndexOf('_') != -1)163return nlsFileName.substring(nlsFileName.indexOf('_')+1);164else165return "(default)";166}167}168169170