{
boolean bError = false;
URIResolver aURIResolver = null;
InputSource aInputSource = null;
OdfPackage aInputPkg = null;
String aMediaType ="text/xml";
aLogger.setName( aInputFile.getAbsolutePath() );
try
{
if( INPUT_MODE_FILE == aInputMode )
{
aInputSource = new InputSource( new FileInputStream(aInputFile) );
}
else
{
aInputPkg = OdfPackage.loadPackage( aInputFile );
aLogger.setName( aInputFile.getAbsolutePath(), aPathInPackage );
aInputSource = new InputSource( aInputPkg.getInputStream(aPathInPackage) );
aInputSource.setSystemId( aInputFile.toURI().toString() + '/' + aPathInPackage );
OdfFileEntry aFileEntry = aInputPkg.getFileEntry(aPathInPackage);
if( aFileEntry != null )
aMediaType = aFileEntry.getMediaTypeString();
aURIResolver =
new ODFURIResolver( aInputPkg, aInputFile.toURI().toString(), aPathInPackage, aLogger );
}
}
catch( Exception e )
{
aLogger.logFatalError(e.getMessage());
return true;
}
String aInputName = aLogger.getName();
Result aOutputResult = null;
OdfPackage aOutputPkg = null;
OutputStream aOutputStream = null;
aLogger.setName( aOutputFile != null ? aOutputFile.getAbsolutePath() : "(none)" );
boolean bMkOutputDirs = false;
try
{
switch( aOutputMode )
{
case OUTPUT_MODE_FILE:
bMkOutputDirs = true;
aOutputResult = new StreamResult( aOutputFile );
break;
case OUTPUT_MODE_STDOUT:
aOutputResult = new StreamResult( System.out );
break;
case OUTPUT_MODE_REPLACE_INPUT_PACKAGE:
aOutputPkg = aInputPkg;
aOutputFile = aInputFile;
break;
case OUTPUT_MODE_COPY_INPUT_PACKAGE:
bMkOutputDirs = true;
aOutputPkg = aInputPkg;
break;
case OUTPUT_MODE_TEMPLATE_PACKAGE:
aOutputPkg = OdfPackage.loadPackage( aOutputFile );
break;
}
if( aOutputResult == null )
{
aLogger.setName( aOutputFile.getAbsolutePath(), aPathInPackage );
aOutputStream =
aOutputPkg.insertOutputStream(aPathInPackage, aMediaType );
aOutputResult = new StreamResult( aOutputStream );
}
}
catch( Exception e )
{
aLogger.logFatalError(e.getMessage());
return true;
}
if( bMkOutputDirs )
{
File aOutputDir = aOutputFile.getParentFile();
if( aOutputDir != null )
aOutputDir.mkdirs();
}
String aOutputName = aLogger.getName();
aLogger.setName( aStyleSheetFile.getAbsolutePath() );
aLogger.logInfo( "Applying stylesheet to '" + aInputName + "'");
bError = runXSLT( aStyleSheetFile, aParams, aInputSource, aOutputResult,
aTransformerFactoryClassName, aURIResolver, aLogger );
if( bError )
return true;
aLogger.setName( aOutputFile != null ? aOutputFile.getAbsolutePath() : "(none)" );
try
{
aLogger.logInfo( "Storing transformation result to '" + aOutputName + "'");
if( !bError && aOutputStream != null )
aOutputStream.close();
if( !bError && aOutputPkg != null )
aOutputPkg.save(aOutputFile);
if( aOutputMode == OUTPUT_MODE_FILE && aExtractFileNames != null && aInputPkg != null )
{
File aTargetDir = aOutputFile.getParentFile();
extractFiles( aInputPkg, aTargetDir, aExtractFileNames, aLogger );
}