blob: 9854a57227340ea40e25d3f887f6d158ca7cbc1c [file] [log] [blame]
/**
*
* Copyright 2003-2006 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.geronimo.installer.processing;
import java.io.*;
public class FixTextLines {
// get the install path
// get list of file types to fix
// search for file types and fix them
protected static String fileTypes[] = {
".dtd",
".ent",
".htm",
".html",
".java",
".js",
".jsp",
".properties",
".sql",
".txt",
".wsdl",
".xml",
".xsd",
".xsl",
"STATUS"
};
protected static String installPath = null;
protected static String tempSubDir = "var/temp";
protected static String tempPath = null;
public static void main( String argv[] ) {
String outStr = null;
if( argv.length < 1 ) {
outStr = "FixTextLines requires the path of the Geronimo installation.";
System.out.println( outStr );
throw new RuntimeException( outStr );
}
installPath = argv[0];
tempPath = installPath + "/" + tempSubDir;
File tempPathFile = new File( tempPath );
if( tempPathFile.exists() == false ) {
outStr = "FixTextLines: temporary directory does not exist. Check installPath.";
System.out.println( outStr );
throw new RuntimeException( outStr );
}
if( tempPathFile.isDirectory() == false ) {
outStr = "FixTextLines: temporary directory exists, but is not a directory. Check installPath.";
System.out.println( outStr );
throw new RuntimeException( outStr );
}
FixTextLines ftl = new FixTextLines();
ftl.fixFiles( new File( installPath ));
System.out.println( "FixTextLines processing complete." );
}
public void fixFiles( File dir ) {
File files[] = null;
try {
files = dir.listFiles();
} catch( Exception e ) {
System.err.println( "FixTextLines: error obtaining list of files to process -" + dir.getPath() );
}
for( int i = 0; i < files.length; ++i ) {
String path = null;
try {
path = files[i].getCanonicalPath();
} catch( Exception e1 ) {
System.err.println("FixTextLines: error getting file path name." );
}
if( files[i].isDirectory( )) {
// recurse into all directories except .../var/temp
if( path.equalsIgnoreCase( tempPath ) == false ) {
fixFiles( files[ i ] );
}
} else if( isToBeFixed( files[ i ] )) {
fixCrLf( files[ i ] );
}
}
}
public boolean isToBeFixed( File file ) {
boolean fRet = false;
for( int i = 0; i < fileTypes.length; ++i ) {
String name = file.getName();
if( fileTypes[i].startsWith( "." )) {
int idx = name.lastIndexOf( "." );
if( idx > -1 ) {
if( fileTypes[i].equals( name.substring( idx ))) {
fRet = true;
break;
}
}
} else {
if( name.equals( fileTypes[i] )) {
fRet = true;
break;
}
}
}
return fRet;
}
public void fixCrLf( File file ) {
// copy the file to temp dir while making change
// move original file to ".original"
// move temp version to original directory
// delete ".original" version if everything completes successfully
boolean fErr = false;
BufferedReader br = null;
BufferedWriter bw = null;
try {
br = new BufferedReader( new FileReader( file ));
} catch( IOException ioe ) {
System.err.println( "FixTextLines: " + file.getPath() + " cannot be opened." );
fErr = true;
}
String tmpname = tempPath + "/" + file.getName();
File tmpFile = new File( tmpname );
if( fErr == false ) {
try {
bw = new BufferedWriter( new FileWriter( tmpFile ));
} catch( IOException ioe ) {
System.err.println( "FixTextLines: " + tmpname + " cannot be created." );
fErr = true;
}
}
if( fErr == false ) {
try {
String inStr = br.readLine();
while( inStr != null ) {
bw.write( inStr );
bw.newLine();
inStr = br.readLine();
}
bw.newLine();
bw.close();
br.close();
} catch( IOException ioe ) {
fErr = true;
System.err.println( "FixTextLines: Error adjusting CRLF format for: " + file.getPath() + " during copy." );
}
}
if( fErr == false ) {
try {
boolean fSuccess = false;
String originalName = file.getCanonicalPath();
fSuccess = file.renameTo( new File( file.getCanonicalPath() + ".original" ));
if( fSuccess ) {
fSuccess = tmpFile.renameTo( new File( originalName ) );
if( fSuccess ) {
//System.out.println( originalName + " successfully processed." );
File orig = new File( originalName + ".original" );
orig.delete(); // delete the original (xxx.original)
} else {
System.err.println( "FixTextLines: " + originalName + " final rename failed." );
fErr = true;
}
}
else
{
System.err.println( "FixTextLines: " + originalName + " initial rename failed." );
fErr = true;
}
} catch( Exception e ) {
System.err.println( "FixTextLines: Error moving files. " + file.getPath() );
fErr = true;
}
}
}
}