Fixed file eol-style problems as well as issues introduced in the

makesystem with the Windows Install check-in.
This commit is contained in:
Juan Carlos Luciani
2007-01-16 11:21:37 +00:00
parent 3ba102c4f1
commit de3e4457c3
21 changed files with 2855 additions and 2855 deletions

View File

@@ -1,69 +1,69 @@
#######################################################################
#
# Copyright (C) 2004 Novell, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Free
# Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# Author: Greg Richardson <grichardson@novell.com>
#
#######################################################################
SUBDIRS =
DIST_SUBDIRS =
EXTRA_DIST = UpdateWarFile.vjsproj Program.jsl
if DEBUG
TARGET_CFG = Debug
else
TARGET_CFG = Release
endif
PACKAGE = UpdateWarFile
TARGET_FILE = $(PACKAGE).exe
LOG_FILE = $(PACKAGE).log
.PHONY: package package-clean package-install package-uninstall devenv
package: $(TARGET_FILE)
devenv:
@if ! test -x "$(VSINSTALLDIR)/Common7/IDE/devenv.exe"; then echo "Error: Microsoft Visual Studio .NET is currently required to build MSI and MSM packages"; exit 1; fi
$(TARGET_FILE): devenv
@rm -f $(LOG_FILE) $@
@CMD='"$(VSINSTALLDIR)/Common7/IDE/devenv.exe" ../server-java_msi/server-java_msi.sln /build $(TARGET_CFG) /project $(PACKAGE) /out $(LOG_FILE)'; \
echo $$CMD; \
if eval $$CMD; then \
ls -l bin/$(TARGET_CFG)/$(TARGET_FILE); \
else \
grep -a "ERROR:" $(LOG_FILE); \
fi
package-clean clean-local:
rm -rf Release/* Release Debug/* Debug*/Release */Debug *.log *.suo
clean:
rm -rf Release/* Release Debug/* Debug */Release */Debug *.log *.suo
distclean-local: package-clean
rm -f Makefile
maintainer-clean-local:
rm -f Makefile.in
#######################################################################
#
# Copyright (C) 2004 Novell, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Free
# Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# Author: Greg Richardson <grichardson@novell.com>
#
#######################################################################
SUBDIRS =
DIST_SUBDIRS =
EXTRA_DIST = UpdateWarFile.vjsproj Program.jsl
if DEBUG
TARGET_CFG = Debug
else
TARGET_CFG = Release
endif
PACKAGE = UpdateWarFile
TARGET_FILE = $(PACKAGE).exe
LOG_FILE = $(PACKAGE).log
.PHONY: package package-clean package-install package-uninstall devenv
package: $(TARGET_FILE)
devenv:
@if ! test -x "$(VSINSTALLDIR)/Common7/IDE/devenv.exe"; then echo "Error: Microsoft Visual Studio .NET is currently required to build MSI and MSM packages"; exit 1; fi
$(TARGET_FILE): devenv
@rm -f $(LOG_FILE) $@
@CMD='"$(VSINSTALLDIR)/Common7/IDE/devenv.exe" ../server-java_msi/server-java_msi.sln /build $(TARGET_CFG) /project $(PACKAGE) /out $(LOG_FILE)'; \
echo $$CMD; \
if eval $$CMD; then \
ls -l bin/$(TARGET_CFG)/$(TARGET_FILE); \
else \
grep -a "ERROR:" $(LOG_FILE); \
fi
package-clean clean-local:
rm -rf Release/* Release Debug/* Debug*/Release */Debug *.log *.suo
clean:
rm -rf Release/* Release Debug/* Debug */Release */Debug *.log *.suo
distclean-local: package-clean
rm -f Makefile
maintainer-clean-local:
rm -f Makefile.in

View File

@@ -1,417 +1,417 @@
/***********************************************************************
*
* Copyright (C) 2006 Novell, Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; version 2.1
* of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, Novell, Inc.
*
* To contact Novell about this file by physical or electronic mail,
* you may find current contact information at www.novell.com.
*
* Author: Juan Carlos Luciani <jluciani@novell.com>
*
***********************************************************************/
package UpdateWarFile;
import java.lang.Throwable;
import java.lang.NullPointerException;
import com.zerog.ia.api.pub.*;
import java.util.*;
import java.net.*;
import java.io.*;
import java.util.zip.*;
import java.util.jar.*;
/**
* Summary description for Program
*/
public class Program
{
final static String INSTALL_DIR_PARAM = "ATS_INSTALL_DIR=";
final static int ERROR_NO_ERROR = 0;
final static int ERROR_IO_EXCEPTION = -1;
final static int ERROR_INVALID_NUMBER_OF_PARAMS = -2;
final static int ERROR_BAD_INSTALL_DIR_PARAM = -3;
final static int ERROR_MISSING_INSTALL_DIR = -4;
final static int ERROR_INSTALL_DIR_NOT_A_DIR = -5;
final static int ERROR_MISSING_INSTALL_DIR_PARAM = -6;
final static int ERROR_WAR_TEMPLATE_FILE_MISSING = -7;
final static int ERROR_NEW_JAR_CANNOT_BE_REPLACED = -8;
final static int ERROR_JAR_COPY_FAILED = -9;
final static int ERROR_CREATE_WAR_FILE_FAILED = -10;
final static int ERROR_CREATE_WAR_FOS_FAILED = -11;
final static int ERROR_OPEN_JAR_TEMPLATE_FAILED = -12;
final static int ERROR_JOS_FLUSH_FAILED = -13;
final static int ERROR_ADD_FILE_TO_JAR_FAILED = -14;
final static int ERROR_JOS_CLOSE_FAILED = -15;
final static int ERROR_FOS_CLOSE_FAILED = -16;
final static int ERROR_JFTEMPLATE_CLOSE_FAILED = -17;
String sInstallDir;
File file;
FileWriter fw;
public static void main(String[] args)
{
Program p = new Program(args);
}
Program(String[] args)
{
int rc = ERROR_NO_ERROR;
sInstallDir = null;
try
{
file = new File("c:\\test3.log");
fw = new FileWriter(file);
log("Here we go: " + args.length);
for (int i = 0; i < args.length; i++)
{
log("Arg " + i + " = " + args[i]);
}
// Process the arguments
if (ERROR_NO_ERROR == (rc = processArgs(args)))
{
// Create the modified war file
rc = createWarFile();
}
}
catch (IOException e)
{
rc = ERROR_IO_EXCEPTION;
}
finally
{
try
{
log("return code = " + rc);
fw.flush();
fw.close();
}
catch (Exception e1)
{
}
}
System.exit(rc);
}
int processArgs(String[] args)
{
File fileInstallDir = null;
int i;
// Validate the number of parameters
if (args.length != 1)
{
return ERROR_INVALID_NUMBER_OF_PARAMS;
}
for (i = 0; i < args.length; i++)
{
log("arg[" + i + "] = " + args[i]);
// is this the install dir param?
if (args[i].startsWith(INSTALL_DIR_PARAM))
{
// Make sure it is more than the param tag
if (args[i].length() <= INSTALL_DIR_PARAM.length())
{
return ERROR_BAD_INSTALL_DIR_PARAM;
}
sInstallDir = args[i].substring(INSTALL_DIR_PARAM.length()).trim();
fileInstallDir = new File(sInstallDir);
// Make sure the install dir can be found
if (!fileInstallDir.exists())
{
return ERROR_MISSING_INSTALL_DIR;
}
// Make sure the install dir is a directory
if (!fileInstallDir.isDirectory())
{
return ERROR_INSTALL_DIR_NOT_A_DIR;
}
}
}
// Make sure we got an install dir
if (null == fileInstallDir)
{
return ERROR_MISSING_INSTALL_DIR_PARAM;
}
return ERROR_NO_ERROR;
}
int createWarFile()
{
String sWarTemplate = sInstallDir + "ats\\etc\\svc\\templates\\CasaAuthTokenSvc.war";
String sWarNew = sInstallDir + "ats\\catalinabase\\webapps\\CasaAuthTokenSvc.war";
File fileWarTemplate = new File(sWarTemplate);;
File fileWarNew = new File(sWarNew);
FileOutputStream fosWarNew = null;
ZipOutputStream josWarNew = null;
ZipFile jfTemplate = null;
int rc = ERROR_NO_ERROR;
// Ensure that the war template exists
log("looking for war template: " + sWarTemplate);
if (!fileWarTemplate.exists())
{
rc = ERROR_WAR_TEMPLATE_FILE_MISSING;
}
if (rc == ERROR_NO_ERROR)
{
// Ensure that the new jar name does not exist
if (fileWarNew.exists())
{
log("war file already exists: " + sWarNew);
if (!fileWarNew.delete())
{
log("could not delete war file: " + sWarNew);
rc = ERROR_NEW_JAR_CANNOT_BE_REPLACED;
}
}
}
if (rc == ERROR_NO_ERROR)
{
// Create/open the new jar
try
{
log("create new war file output stream: " + sWarNew);
fosWarNew = new FileOutputStream(fileWarNew);
josWarNew = new ZipOutputStream(fosWarNew);
}
catch (IOException ioe0)
{
log(ioe0.toString());
rc = ERROR_CREATE_WAR_FOS_FAILED;
}
}
if (rc == ERROR_NO_ERROR)
{
// Open the old jar
try
{
jfTemplate = new ZipFile(sWarTemplate);
}
catch (IOException ioe1)
{
rc = ERROR_OPEN_JAR_TEMPLATE_FAILED;
}
}
if (rc == ERROR_NO_ERROR)
{
// Transfer the files
rc = moveFilesFromJarToJar(josWarNew, jfTemplate);
}
// Add the files
if (rc == ERROR_NO_ERROR)
{
int i;
String [] rgsFilesToAdd = new String[1];
rgsFilesToAdd[0] = sInstallDir + "ats\\etc\\svc\\templates\\crypto.properties";
String [] rgsNames = new String[1];
rgsNames[0] = "WEB-INF/classes/crypto.properties";
for (i = 0; i < rgsFilesToAdd.length; i++)
{
log("Adding file: " + rgsFilesToAdd[i] + " with name " + rgsNames[i]);
rc = addFileToJar(rgsFilesToAdd[i], rgsNames[i], josWarNew);
}
}
// Close up
if (null != josWarNew)
{
try
{
josWarNew.flush();
}
catch (IOException ioe2)
{
rc = ERROR_JOS_FLUSH_FAILED;
}
try
{
josWarNew.close();
}
catch (IOException ioe3)
{
rc = ERROR_JOS_CLOSE_FAILED;
}
try
{
fosWarNew.close();
}
catch (IOException ioe4)
{
rc = ERROR_FOS_CLOSE_FAILED;
}
}
if (null != jfTemplate)
{
try
{
jfTemplate.close();
}
catch (IOException ioe5)
{
rc = ERROR_JFTEMPLATE_CLOSE_FAILED;
}
}
return rc;
}
int moveFilesFromJarToJar(ZipOutputStream josDst, ZipFile jfSrc)
{
int rc = ERROR_NO_ERROR;
try
{
Enumeration entries = jfSrc.entries();
ZipEntry jeLoop;
InputStream isLoop;
ZipEntry zeIndex;
int bRead;
byte [] b = new byte[4096];
while (entries.hasMoreElements())
{
jeLoop = (ZipEntry)entries.nextElement();
// Skip WEB-INF/classes/cypto.properties
if (jeLoop.getName().equalsIgnoreCase("WEB-INF/classes/crypto.properties"))
{
log("skipping: " + "WEB-INF/classes/crypto.properties");
continue;
}
// Move the rest of the files over
else
{
log("Transferring jar file: " + jeLoop.getName());
// Create the input stream
isLoop = jfSrc.getInputStream(jeLoop);
// Set up the output stream
zeIndex = new ZipEntry(jeLoop.getName());
josDst.putNextEntry( zeIndex);
// Transfer the file contents
while (-1 != (bRead = isLoop.read(b)))
{
josDst.write(b, 0, bRead);
}
// all done
josDst.closeEntry();
isLoop.close();
}
}
}
catch (Exception e)
{
rc = ERROR_JAR_COPY_FAILED;
}
return rc;
}
int addFileToJar(String sFilename, String sName, ZipOutputStream josJarNew)
{
FileInputStream fis;
ZipEntry je;
int bRead;
byte [] b = new byte[4096];
int rc = ERROR_NO_ERROR;
try
{
// Create the input stream
fis = new FileInputStream(sFilename);
// Set up the output stream
je = new ZipEntry(sName);
josJarNew.putNextEntry(je);
// Tansfer the contents of the file
while (-1 != (bRead = fis.read(b)))
{
josJarNew.write(b, 0, bRead);
}
// All done
fis.close();
josJarNew.closeEntry();
}
catch (Exception e)
{
log(e.toString());
rc = ERROR_ADD_FILE_TO_JAR_FAILED;
}
return rc;
}
void log(int err)
{
log(err, null);
}
void log(int err, String s)
{
String sMessage = "";
switch (err)
{
case ERROR_NO_ERROR:
sMessage = "No error";
break;
case ERROR_INVALID_NUMBER_OF_PARAMS:
sMessage = "Invalid number of parameters: 4 expected";
break;
default:
sMessage = "Unknown error: " + err;
break;
}
if (null != s)
{
sMessage = sMessage + s;
}
log(sMessage);
}
void log(String s)
{
try
{
fw.write(this.getClass().getName() + ": " + s + "\r\n");
}
catch (IOException ioe)
{
}
}
}
/***********************************************************************
*
* Copyright (C) 2006 Novell, Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; version 2.1
* of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, Novell, Inc.
*
* To contact Novell about this file by physical or electronic mail,
* you may find current contact information at www.novell.com.
*
* Author: Juan Carlos Luciani <jluciani@novell.com>
*
***********************************************************************/
package UpdateWarFile;
import java.lang.Throwable;
import java.lang.NullPointerException;
import com.zerog.ia.api.pub.*;
import java.util.*;
import java.net.*;
import java.io.*;
import java.util.zip.*;
import java.util.jar.*;
/**
* Summary description for Program
*/
public class Program
{
final static String INSTALL_DIR_PARAM = "ATS_INSTALL_DIR=";
final static int ERROR_NO_ERROR = 0;
final static int ERROR_IO_EXCEPTION = -1;
final static int ERROR_INVALID_NUMBER_OF_PARAMS = -2;
final static int ERROR_BAD_INSTALL_DIR_PARAM = -3;
final static int ERROR_MISSING_INSTALL_DIR = -4;
final static int ERROR_INSTALL_DIR_NOT_A_DIR = -5;
final static int ERROR_MISSING_INSTALL_DIR_PARAM = -6;
final static int ERROR_WAR_TEMPLATE_FILE_MISSING = -7;
final static int ERROR_NEW_JAR_CANNOT_BE_REPLACED = -8;
final static int ERROR_JAR_COPY_FAILED = -9;
final static int ERROR_CREATE_WAR_FILE_FAILED = -10;
final static int ERROR_CREATE_WAR_FOS_FAILED = -11;
final static int ERROR_OPEN_JAR_TEMPLATE_FAILED = -12;
final static int ERROR_JOS_FLUSH_FAILED = -13;
final static int ERROR_ADD_FILE_TO_JAR_FAILED = -14;
final static int ERROR_JOS_CLOSE_FAILED = -15;
final static int ERROR_FOS_CLOSE_FAILED = -16;
final static int ERROR_JFTEMPLATE_CLOSE_FAILED = -17;
String sInstallDir;
File file;
FileWriter fw;
public static void main(String[] args)
{
Program p = new Program(args);
}
Program(String[] args)
{
int rc = ERROR_NO_ERROR;
sInstallDir = null;
try
{
file = new File("c:\\test3.log");
fw = new FileWriter(file);
log("Here we go: " + args.length);
for (int i = 0; i < args.length; i++)
{
log("Arg " + i + " = " + args[i]);
}
// Process the arguments
if (ERROR_NO_ERROR == (rc = processArgs(args)))
{
// Create the modified war file
rc = createWarFile();
}
}
catch (IOException e)
{
rc = ERROR_IO_EXCEPTION;
}
finally
{
try
{
log("return code = " + rc);
fw.flush();
fw.close();
}
catch (Exception e1)
{
}
}
System.exit(rc);
}
int processArgs(String[] args)
{
File fileInstallDir = null;
int i;
// Validate the number of parameters
if (args.length != 1)
{
return ERROR_INVALID_NUMBER_OF_PARAMS;
}
for (i = 0; i < args.length; i++)
{
log("arg[" + i + "] = " + args[i]);
// is this the install dir param?
if (args[i].startsWith(INSTALL_DIR_PARAM))
{
// Make sure it is more than the param tag
if (args[i].length() <= INSTALL_DIR_PARAM.length())
{
return ERROR_BAD_INSTALL_DIR_PARAM;
}
sInstallDir = args[i].substring(INSTALL_DIR_PARAM.length()).trim();
fileInstallDir = new File(sInstallDir);
// Make sure the install dir can be found
if (!fileInstallDir.exists())
{
return ERROR_MISSING_INSTALL_DIR;
}
// Make sure the install dir is a directory
if (!fileInstallDir.isDirectory())
{
return ERROR_INSTALL_DIR_NOT_A_DIR;
}
}
}
// Make sure we got an install dir
if (null == fileInstallDir)
{
return ERROR_MISSING_INSTALL_DIR_PARAM;
}
return ERROR_NO_ERROR;
}
int createWarFile()
{
String sWarTemplate = sInstallDir + "ats\\etc\\svc\\templates\\CasaAuthTokenSvc.war";
String sWarNew = sInstallDir + "ats\\catalinabase\\webapps\\CasaAuthTokenSvc.war";
File fileWarTemplate = new File(sWarTemplate);;
File fileWarNew = new File(sWarNew);
FileOutputStream fosWarNew = null;
ZipOutputStream josWarNew = null;
ZipFile jfTemplate = null;
int rc = ERROR_NO_ERROR;
// Ensure that the war template exists
log("looking for war template: " + sWarTemplate);
if (!fileWarTemplate.exists())
{
rc = ERROR_WAR_TEMPLATE_FILE_MISSING;
}
if (rc == ERROR_NO_ERROR)
{
// Ensure that the new jar name does not exist
if (fileWarNew.exists())
{
log("war file already exists: " + sWarNew);
if (!fileWarNew.delete())
{
log("could not delete war file: " + sWarNew);
rc = ERROR_NEW_JAR_CANNOT_BE_REPLACED;
}
}
}
if (rc == ERROR_NO_ERROR)
{
// Create/open the new jar
try
{
log("create new war file output stream: " + sWarNew);
fosWarNew = new FileOutputStream(fileWarNew);
josWarNew = new ZipOutputStream(fosWarNew);
}
catch (IOException ioe0)
{
log(ioe0.toString());
rc = ERROR_CREATE_WAR_FOS_FAILED;
}
}
if (rc == ERROR_NO_ERROR)
{
// Open the old jar
try
{
jfTemplate = new ZipFile(sWarTemplate);
}
catch (IOException ioe1)
{
rc = ERROR_OPEN_JAR_TEMPLATE_FAILED;
}
}
if (rc == ERROR_NO_ERROR)
{
// Transfer the files
rc = moveFilesFromJarToJar(josWarNew, jfTemplate);
}
// Add the files
if (rc == ERROR_NO_ERROR)
{
int i;
String [] rgsFilesToAdd = new String[1];
rgsFilesToAdd[0] = sInstallDir + "ats\\etc\\svc\\templates\\crypto.properties";
String [] rgsNames = new String[1];
rgsNames[0] = "WEB-INF/classes/crypto.properties";
for (i = 0; i < rgsFilesToAdd.length; i++)
{
log("Adding file: " + rgsFilesToAdd[i] + " with name " + rgsNames[i]);
rc = addFileToJar(rgsFilesToAdd[i], rgsNames[i], josWarNew);
}
}
// Close up
if (null != josWarNew)
{
try
{
josWarNew.flush();
}
catch (IOException ioe2)
{
rc = ERROR_JOS_FLUSH_FAILED;
}
try
{
josWarNew.close();
}
catch (IOException ioe3)
{
rc = ERROR_JOS_CLOSE_FAILED;
}
try
{
fosWarNew.close();
}
catch (IOException ioe4)
{
rc = ERROR_FOS_CLOSE_FAILED;
}
}
if (null != jfTemplate)
{
try
{
jfTemplate.close();
}
catch (IOException ioe5)
{
rc = ERROR_JFTEMPLATE_CLOSE_FAILED;
}
}
return rc;
}
int moveFilesFromJarToJar(ZipOutputStream josDst, ZipFile jfSrc)
{
int rc = ERROR_NO_ERROR;
try
{
Enumeration entries = jfSrc.entries();
ZipEntry jeLoop;
InputStream isLoop;
ZipEntry zeIndex;
int bRead;
byte [] b = new byte[4096];
while (entries.hasMoreElements())
{
jeLoop = (ZipEntry)entries.nextElement();
// Skip WEB-INF/classes/cypto.properties
if (jeLoop.getName().equalsIgnoreCase("WEB-INF/classes/crypto.properties"))
{
log("skipping: " + "WEB-INF/classes/crypto.properties");
continue;
}
// Move the rest of the files over
else
{
log("Transferring jar file: " + jeLoop.getName());
// Create the input stream
isLoop = jfSrc.getInputStream(jeLoop);
// Set up the output stream
zeIndex = new ZipEntry(jeLoop.getName());
josDst.putNextEntry( zeIndex);
// Transfer the file contents
while (-1 != (bRead = isLoop.read(b)))
{
josDst.write(b, 0, bRead);
}
// all done
josDst.closeEntry();
isLoop.close();
}
}
}
catch (Exception e)
{
rc = ERROR_JAR_COPY_FAILED;
}
return rc;
}
int addFileToJar(String sFilename, String sName, ZipOutputStream josJarNew)
{
FileInputStream fis;
ZipEntry je;
int bRead;
byte [] b = new byte[4096];
int rc = ERROR_NO_ERROR;
try
{
// Create the input stream
fis = new FileInputStream(sFilename);
// Set up the output stream
je = new ZipEntry(sName);
josJarNew.putNextEntry(je);
// Tansfer the contents of the file
while (-1 != (bRead = fis.read(b)))
{
josJarNew.write(b, 0, bRead);
}
// All done
fis.close();
josJarNew.closeEntry();
}
catch (Exception e)
{
log(e.toString());
rc = ERROR_ADD_FILE_TO_JAR_FAILED;
}
return rc;
}
void log(int err)
{
log(err, null);
}
void log(int err, String s)
{
String sMessage = "";
switch (err)
{
case ERROR_NO_ERROR:
sMessage = "No error";
break;
case ERROR_INVALID_NUMBER_OF_PARAMS:
sMessage = "Invalid number of parameters: 4 expected";
break;
default:
sMessage = "Unknown error: " + err;
break;
}
if (null != s)
{
sMessage = sMessage + s;
}
log(sMessage);
}
void log(String s)
{
try
{
fw.write(this.getClass().getName() + ": " + s + "\r\n");
}
catch (IOException ioe)
{
}
}
}