I think the whole problem is with XML parsing.
IE supports but Mozilla does not.
IE supports but Mozilla does not.
import java.io.*;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;
import org.apache.xerces.parsers.DOMParser ;
import org.xml.sax.SAXException;
import java.io.IOException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
/**
* Generates handler code and associated property files for specified screens.
*
* Created by IntelliJ IDEA.
* User: sfalby
* Date: Sep 12, 2003
* Time: 10:34:50 AM
* To change this template use Options | File Templates.
*/
public class ScreenGenerator {
private static final boolean overwrite = true;
public static void main(String[] args) {
try {
// check arguments
if (args.length != 7) {
System.err.println("HandlerGenerator error : arguments incorrect");
return;
}
// generate
generate(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
}
catch (Exception e) {
System.err.println("HandlerGenerator error : " + e.getMessage());
e.printStackTrace();
}
}
/**
* Generates handler classes and property files.
*
* @param handlerDestDir destination for handler class files
* @param handlerPackage package for handler classes
* @param propertyDestDir destination for property files
* @param languageSuffix language suffix appended to end of property file name
* @param screensFile file containing screen descriptions
* @param menuFile wrap menu file
* @param forwardsFile global forwards file
*/
public static void generate(
String handlerDestDir,
String handlerPackage,
String propertyDestDir,
String languageSuffix,
String screensFile,
String menuFile,
String forwardsFile)
throws IOException, SAXException {
// get screens
Vector screens = getScreens(screensFile);
// iterate through screens
Vector screenNames = new Vector();
for (int i = 0; i < screens.size(); i++) {
// get next screen
Element screen = (Element)screens.get(i);
// get screen name
String screenName = screen.getAttribute("screenName");
System.out.println("screenName = " + screenName);
// get property template
String propertyTemplate = screen.getAttribute("propertyTemplate");
System.out.println(" propertyTemplate = " + propertyTemplate);
// get handler template
String handlerTemplate = screen.getAttribute("handlerTemplate");
System.out.println(" handlerTemplate = " + handlerTemplate);
// get handler class name
String handlerClassname = screenName + "Handler";
System.out.println(" handlerClassname = " + handlerClassname);
// get handler base class
String handlerBaseClassname = screen.getAttribute("handlerBaseClass");
System.out.println(" handlerBaseClass = " + handlerBaseClassname);
// get handler file path
String handlerFilePath = handlerDestDir + "\\" + handlerClassname + ".java";
// create handler file
createHandlerFile(handlerTemplate, handlerFilePath, handlerPackage, handlerClassname, handlerBaseClassname, screenName);
// get property file path
String propertyFilePath = propertyDestDir + "\\" + screenName + languageSuffix + ".properties";
// create property file
createPropertyFile(propertyTemplate, propertyFilePath, screenName, handlerBaseClassname);
// add screen name
screenNames.add(screenName);
}
// create menus
createMenus(menuFile, screenNames);
// create global forwards
createGlobalForwards(forwardsFile, screenNames);
}
//////////////////////////////////////////////////////////
// Private Functions
//////////////////////////////////////////////////////////
private static Vector getScreens(String screensFile)
throws SAXException, IOException {
// create xerces DOM parser
DOMParser parser = new DOMParser ();
// parse file
parser.parse(screensFile);
// get document
Document document = parser.getDocument();
// traverse tree
Vector screens = new Vector();
traverse(document, screens);
// return results
return screens;
}
private static void traverse (Node node, Vector nodes) {
// get type
int type = node.getNodeType();
// add element nodes
if (node.getNodeName().equals("screen") && type == Node.ELEMENT_NODE)
nodes.add(node);
// check if children nodes exist
NodeList children = node.getChildNodes();
if (children != null) {
for (int i=0; i< children.getLength(); i++)
traverse (children.item(i), nodes);
}
}
private static void createHandlerFile(
String templateFile,
String handlerFile,
String handlerPackage,
String handlerClassname,
String handlerBaseClassname,
String screenName)
throws IOException {
// check if file exista
if (!overwrite) {
File f = new File(handlerFile);
if (f.exists()) {
System.err.println(handlerFile + " already exists");
return;
}
}
// set up file reader and writer
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(templateFile)));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(handlerFile)));
// iterate through template file
String line = null;
while((line = reader.readLine()) != null) {
// replace text
line = line.replaceAll("<PACKAGE>", handlerPackage);
line = line.replaceAll("<CLASS>", handlerClassname);
line = line.replaceAll("<BASECLASS>", handlerBaseClassname);
line = line.replaceAll("<SCREEN>", screenName);
// write line
writer.write(line + "\r\n");
writer.flush();
}
// close resources
reader.close();
writer.close();
}
private static void createPropertyFile(
String templateFile,
String propertyFile,
String screenName,
String handlerBaseClassname)
throws IOException {
// check if file exista
if (!overwrite) {
File f = new File(propertyFile);
if (f.exists()) {
System.err.println(propertyFile + " already exists");
return;
}
}
// set up file reader and writer
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(templateFile)));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(propertyFile)));
// iterate through template file
String line = null;
while((line = reader.readLine()) != null) {
// replace text
line = line.replaceAll("<SCREEN TITLE>", screenName);
line = line.replaceAll("<SCREEN>", screenName);
// write line
writer.write(line + "\r\n");
writer.flush();
}
// close resources
reader.close();
writer.close();
}
private static void createMenus(
String menuFile,
Vector screenNames)
throws IOException {
boolean generatedMenu = false;
// set up file reader and writer
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(menuFile)));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(menuFile + ".temp")));
// iterate through menu file
String line = null;
while((line = reader.readLine()) != null) {
// find place holder
if (line.indexOf("Generated Screens Start") >= 0) {
// set flag
generatedMenu = true;
// write place holder
writer.write(line + "\r\n");
// iterate through screens
for (Iterator i = screenNames.iterator(); i.hasNext();) {
// get next screen name
String screenName = (String)i.next();
// write menu
writer.write(" <menuitem key=\"" + screenName + "\" url=\"" + screenName + ".do\"/>" + "\r\n");
}
}
else if (line.indexOf("Generated Screens End") >= 0) {
// reset flag
generatedMenu = false;
// write place holder
writer.write(line + "\r\n");
}
else if (generatedMenu) {
// ignore existing generated screens
}
else {
writer.write(line + "\r\n");
}
writer.flush();
}
// close resources
reader.close();
writer.close();
// switch files
File fromMenu = new File(menuFile + ".temp");
File toMenu = new File(menuFile);
copyFile(fromMenu, toMenu);
// delete temp file
fromMenu.delete();
}
private static void createGlobalForwards(
String forwardsFile,
Vector screenNames)
throws IOException {
boolean generatedForward = false;
// set up file reader and writer
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(forwardsFile)));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(forwardsFile + ".temp")));
// iterate through menu file
String line = null;
while((line = reader.readLine()) != null) {
// find place holder
if (line.indexOf("Generated Forwards Start") >= 0) {
// set flag
generatedForward = true;
// write place holder
writer.write(line + "\r\n");
// iterate through screens
for (Iterator i = screenNames.iterator(); i.hasNext();) {
// get next screen name
String screenName = (String)i.next();
// write forward
writer.write(" <forward name=\"" + screenName + "\" path=\"/" + screenName + ".do\"/>" + "\r\n");
}
}
else if (line.indexOf("Generated Forwards End") >= 0) {
// reset flag
generatedForward = false;
// write place holder
writer.write(line + "\r\n");
}
else if (generatedForward) {
// ignore existing generated forwards
}
else {
writer.write(line + "\r\n");
}
writer.flush();
}
// close resources
reader.close();
writer.close();
// switch files
File fromMenu = new File(forwardsFile + ".temp");
File toMenu = new File(forwardsFile);
copyFile(fromMenu, toMenu);
// delete temp file
fromMenu.delete();
}
private static void copyFile(File fromFile, File toFile)
throws IOException {
FileInputStream in = new FileInputStream(fromFile);
FileOutputStream out = new FileOutputStream(toFile);
byte[] buf = new byte[1024];
int i = 0;
while((i=in.read(buf))!=-1)
out.write(buf, 0, i);
in.close();
out.close();
}
}
public class ScreenGenerator {
private static final boolean overwrite = true;
public static void main(String[] args) {
try {
// check arguments
if (args.length != 7) {
System.err.println("HandlerGenerator error : arguments incorrect");
return;
}
// generate
generate(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
}
catch (Exception e) {
System.err.println("HandlerGenerator error : " + e.getMessage());
e.printStackTrace();
}
}
/**
* Generates handler classes and property files.
*
* @param handlerDestDir destination for handler class files
* @param handlerPackage package for handler classes
* @param propertyDestDir destination for property files
* @param languageSuffix language suffix appended to end of property file name
* @param screensFile file containing screen descriptions
* @param menuFile wrap menu file
* @param forwardsFile global forwards file
*/
public static void generate(
String handlerDestDir,
String handlerPackage,
String propertyDestDir,
String languageSuffix,
String screensFile,
String menuFile,
String forwardsFile)
throws IOException, SAXException {
// get screens
Vector screens = getScreens(screensFile);
// iterate through screens
Vector screenNames = new Vector();
for (int i = 0; i < screens.size(); i++) {
// get next screen
Element screen = (Element)screens.get(i);
// get screen name
String screenName = screen.getAttribute("screenName");
System.out.println("screenName = " + screenName);
// get property template
String propertyTemplate = screen.getAttribute("propertyTemplate");
System.out.println(" propertyTemplate = " + propertyTemplate);
// get handler template
String handlerTemplate = screen.getAttribute("handlerTemplate");
System.out.println(" handlerTemplate = " + handlerTemplate);
// get handler class name
String handlerClassname = screenName + "Handler";
System.out.println(" handlerClassname = " + handlerClassname);
// get handler base class
String handlerBaseClassname = screen.getAttribute("handlerBaseClass");
System.out.println(" handlerBaseClass = " + handlerBaseClassname);
// get handler file path
String handlerFilePath = handlerDestDir + "\\" + handlerClassname + ".java";
// create handler file
createHandlerFile(handlerTemplate, handlerFilePath, handlerPackage, handlerClassname, handlerBaseClassname, screenName);
// get property file path
String propertyFilePath = propertyDestDir + "\\" + screenName + languageSuffix + ".properties";
// create property file
createPropertyFile(propertyTemplate, propertyFilePath, screenName, handlerBaseClassname);
// add screen name
screenNames.add(screenName);
}
// create menus
createMenus(menuFile, screenNames);
// create global forwards
createGlobalForwards(forwardsFile, screenNames);
}
//////////////////////////////////////////////////////////
// Private Functions
//////////////////////////////////////////////////////////
private static Vector getScreens(String screensFile)
throws SAXException, IOException {
// create xerces DOM parser
DOMParser parser = new DOMParser ();
// parse file
parser.parse(screensFile);
// get document
Document document = parser.getDocument();
// traverse tree
Vector screens = new Vector();
traverse(document, screens);
// return results
return screens;
}
private static void traverse (Node node, Vector nodes) {
// get type
int type = node.getNodeType();
// add element nodes
if (node.getNodeName().equals("screen") && type == Node.ELEMENT_NODE)
nodes.add(node);
// check if children nodes exist
NodeList children = node.getChildNodes();
if (children != null) {
for (int i=0; i< children.getLength(); i++)
traverse (children.item(i), nodes);
}
}
private static void createHandlerFile(
String templateFile,
String handlerFile,
String handlerPackage,
String handlerClassname,
String handlerBaseClassname,
String screenName)
throws IOException {
// check if file exista
if (!overwrite) {
File f = new File(handlerFile);
if (f.exists()) {
System.err.println(handlerFile + " already exists");
return;
}
}
// set up file reader and writer
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(templateFile)));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(handlerFile)));
// iterate through template file
String line = null;
while((line = reader.readLine()) != null) {
// replace text
line = line.replaceAll("<PACKAGE>", handlerPackage);
line = line.replaceAll("<CLASS>", handlerClassname);
line = line.replaceAll("<BASECLASS>", handlerBaseClassname);
line = line.replaceAll("<SCREEN>", screenName);
// write line
writer.write(line + "\r\n");
writer.flush();
}
// close resources
reader.close();
writer.close();
}
private static void createPropertyFile(
String templateFile,
String propertyFile,
String screenName,
String handlerBaseClassname)
throws IOException {
// check if file exista
if (!overwrite) {
File f = new File(propertyFile);
if (f.exists()) {
System.err.println(propertyFile + " already exists");
return;
}
}
// set up file reader and writer
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(templateFile)));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(propertyFile)));
// iterate through template file
String line = null;
while((line = reader.readLine()) != null) {
// replace text
line = line.replaceAll("<SCREEN TITLE>", screenName);
line = line.replaceAll("<SCREEN>", screenName);
// write line
writer.write(line + "\r\n");
writer.flush();
}
// close resources
reader.close();
writer.close();
}
private static void createMenus(
String menuFile,
Vector screenNames)
throws IOException {
boolean generatedMenu = false;
// set up file reader and writer
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(menuFile)));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(menuFile + ".temp")));
// iterate through menu file
String line = null;
while((line = reader.readLine()) != null) {
// find place holder
if (line.indexOf("Generated Screens Start") >= 0) {
// set flag
generatedMenu = true;
// write place holder
writer.write(line + "\r\n");
// iterate through screens
for (Iterator i = screenNames.iterator(); i.hasNext();) {
// get next screen name
String screenName = (String)i.next();
// write menu
writer.write(" <menuitem key=\"" + screenName + "\" url=\"" + screenName + ".do\"/>" + "\r\n");
}
}
else if (line.indexOf("Generated Screens End") >= 0) {
// reset flag
generatedMenu = false;
// write place holder
writer.write(line + "\r\n");
}
else if (generatedMenu) {
// ignore existing generated screens
}
else {
writer.write(line + "\r\n");
}
writer.flush();
}
// close resources
reader.close();
writer.close();
// switch files
File fromMenu = new File(menuFile + ".temp");
File toMenu = new File(menuFile);
copyFile(fromMenu, toMenu);
// delete temp file
fromMenu.delete();
}
private static void createGlobalForwards(
String forwardsFile,
Vector screenNames)
throws IOException {
boolean generatedForward = false;
// set up file reader and writer
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(forwardsFile)));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(forwardsFile + ".temp")));
// iterate through menu file
String line = null;
while((line = reader.readLine()) != null) {
// find place holder
if (line.indexOf("Generated Forwards Start") >= 0) {
// set flag
generatedForward = true;
// write place holder
writer.write(line + "\r\n");
// iterate through screens
for (Iterator i = screenNames.iterator(); i.hasNext();) {
// get next screen name
String screenName = (String)i.next();
// write forward
writer.write(" <forward name=\"" + screenName + "\" path=\"/" + screenName + ".do\"/>" + "\r\n");
}
}
else if (line.indexOf("Generated Forwards End") >= 0) {
// reset flag
generatedForward = false;
// write place holder
writer.write(line + "\r\n");
}
else if (generatedForward) {
// ignore existing generated forwards
}
else {
writer.write(line + "\r\n");
}
writer.flush();
}
// close resources
reader.close();
writer.close();
// switch files
File fromMenu = new File(forwardsFile + ".temp");
File toMenu = new File(forwardsFile);
copyFile(fromMenu, toMenu);
// delete temp file
fromMenu.delete();
}
private static void copyFile(File fromFile, File toFile)
throws IOException {
FileInputStream in = new FileInputStream(fromFile);
FileOutputStream out = new FileOutputStream(toFile);
byte[] buf = new byte[1024];
int i = 0;
while((i=in.read(buf))!=-1)
out.write(buf, 0, i);
in.close();
out.close();
}
}
Comment