/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
import java.io.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FilenameFilter;
import java.io.InputStreamReader;
import java.lang.System;
import java.util.Collection;
import java.util.StringTokenizer;
import java.util.Vector;
public class Filter {
static Vector<String> myMessageIds = new Vector();
static Vector<String> myMissingMessageIds = new Vector();
public Collection<File> listFiles(
File directory,
FilenameFilter filter,
boolean recurse) {
Vector<File> files = new Vector<File>();
// Get files / directories in the directory
File[] entries = directory.listFiles();
// Go over entries
for (File entry : entries) {
// If there is no filter or the filter accepts the
// file / directory, add it to the list
if (filter == null || filter.accept(directory, entry.getName())) {
files.add(entry);
}
// If the file is a directory and the recurse flag
// is set, recurse into the directory
if (recurse && entry.isDirectory()) {
files.addAll(listFiles(entry, filter, recurse));
}
}
// Return collection of files
return files;
}
public void readFileToGetMessageIds(File file) {
try {
//System.out.println("\n\n..." + file.getAbsolutePath());
BufferedReader rdr =
new BufferedReader(
new InputStreamReader(
new java.io.FileInputStream(file)));
String line = null;
while ((line = rdr.readLine()) != null) {
//System.out.println("\n..."+line);
if (line.contains(":")
&& line.contains("=")
&& !line.startsWith("#")
&& !line.contains(".cause")
&& !line.contains(".check")) {
StringTokenizer st = new StringTokenizer(line, "=");
if (st.hasMoreTokens()) {
st.nextToken();
String tempString = st.nextToken().trim();
if (tempString.contains(":")) {
String id = tempString.substring(0, tempString.indexOf(":")).trim();
//System.out.println("Ids=" + id);
if (id.length() < 10 && !id.contains(" ") && id.matches("[a-zA-Z0-9]*")) {
myMessageIds.add(id);
}
}
}
}
}
rdr.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("Exception during readFileToGetMessageIds: " + e);
}
}
public void readFileToGetMissingDiagnosticInfo(File file) {
try {
Vector<String> idVector = new Vector();
//System.out.println("\n\n..." + file.getAbsolutePath());
BufferedReader rdr =
new BufferedReader(
new InputStreamReader(
new java.io.FileInputStream(file)));
String line = null;
while ((line = rdr.readLine()) != null) {
//System.out.println("\n..."+line);
if (line.contains(":")
&& line.contains("=")
&& !line.startsWith("#")
&& !line.contains(".cause")
&& !line.contains(".check")) {
StringTokenizer st = new StringTokenizer(line, "=");
if (st.hasMoreTokens()) {
st.nextToken();
String tempString = st.nextToken().trim();
if (tempString.contains(":")) {
String id = tempString.substring(0, tempString.indexOf(":")).trim();
//System.out.println("Ids=" + id);
if (id.length() < 10 && !id.contains(" ") && id.matches("[a-zA-Z0-9]*")) {
myMissingMessageIds.add(id);
}
}
}
}
}
rdr.close();
for (String id : myMissingMessageIds) {
rdr =
new BufferedReader(
new InputStreamReader(
new java.io.FileInputStream(file)));
line = null;
while ((line = rdr.readLine()) != null) {
if (!line.contains("#")
&& (line.contains(id + ".diag.cause") || line.contains(id + ".diag.check"))) {
idVector.add(id);
}
}
rdr.close();
}
for (String id : idVector) {
myMissingMessageIds.remove(id);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("Exception during readFileToGetMissingDiagnosticInfo: " + e);
}
}
public void writeKeyToFile(Vector<String> ids, String fileName) {
try {
FileWriter fw = new FileWriter(new File(fileName));
for (String id : ids) {
fw.write(id + "\n");
}
fw.flush();
fw.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("Exception during Writing File");
}
}
public static void main(String args[]) {
boolean masterIds = false;
boolean missingIds = false;
boolean isGfHome = true;
String gfHome = "";
if (args.length < 2 || args[0]==null || args[1] ==null || ("${glassfish_home}").equals(args[0]) || ("${options}").equals(args[1])
|| ("").equals(args[0]) || ("").equals(args[1]) ) {
System.out.println("Missing Inputs...\n");
System.out.println("Usage: java Filter <glassfish home> <missingId/masterId>\n");
System.out.println("Help: missingId for generate list of Ids which has diagnostic info missing.\n");
System.out.println("Help: masterId for generate master list of Ids.\n");
} else {
gfHome = args[0];
File tempFile = new File(gfHome);
if (tempFile == null || !tempFile.isDirectory()) {
isGfHome = false;
}
if (args[1].equals("missingId")) {
missingIds = true;
}
if (args[1].equals("masterId")) {
masterIds = true;
}
if (!masterIds && !missingIds) {
System.out.println("Missing Inputs...<missingId/masterId> value is missing as second argument.");
} else
if (!isGfHome) {
System.out.println("Missing Inputs...<glassfish home> value is not proper as first argument.");
} else {
FilenameFilter fnm = new FilenameFilter() {
public boolean accept(File dir, String filename) {
return filename.equals("LogStrings.properties");
}
};
Collection<File> myCollection = new Filter().listFiles(new File(args[0]), fnm, true);
//System.out.println(myCollection.size());
if (masterIds) {
for (File myFile : myCollection) {
new Filter().readFileToGetMessageIds(myFile);
}
new Filter().writeKeyToFile(myMessageIds, "master-list-message-ids.txt");
}
if (missingIds) {
for (File myFile : myCollection) {
new Filter().readFileToGetMissingDiagnosticInfo(myFile);
}
new Filter().writeKeyToFile(myMissingMessageIds, "missing-diagnostic-message-ids.txt");
}
}
}
}
}