/*
* Copyright 2000-2004 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.jetspeed.util.file;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.FileOutputStream;
import java.io.File;
/**
* Task to merge files to create the database script
*
* @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
* @version $Id: MergeFiles.java,v 1.4 2004/02/23 03:17:53 jford Exp $
*/
public class MergeFiles
{
protected static List files;
protected static String dest_file = null;
public static boolean verbose = false;
protected static ArrayList baseArray = new ArrayList(1024);
protected static String lineSeparator = System.getProperty("line.separator", "\r\n");
public static void main(String[] args) throws Exception
{
MergeFiles main=new MergeFiles();
try
{
if(args.length < 2)
{
System.out.println("Usage: java MergeFiles [scratch/drop] c:/temp/all.sql c:/temp/dbpsml.sql c:/temp/populate.sql .... c:/temp/File(n)");
System.out.println("Usage: If scratch is specified then all sql statements starting with DROP will be overlooked.");
System.out.println("Usage: If drop is specified then only sql statements starting with DROP will be added.");
System.out.println("Usage: All the files listed after c:/temp/all.sql will be added to c:/temp/all.sql");
throw new Exception("Incorrect number of arguments supplied");
}
int file_index = 0;
boolean db_from_scratch = false;
boolean db_drop = false;
if (args[0].equals("scratch"))
{
file_index = 1;
db_from_scratch = true;
}
else if (args[0].equals("drop"))
{
file_index = 1;
db_drop = true;
}
files = new Vector(args.length - 1 - file_index);
dest_file = args[file_index];
for (int index = (file_index + 1); index < args.length; index++)
{
files.add(args[index]);
}
for (int index = 0; index < files.size(); index++)
{
BufferedReader reader = new BufferedReader(new FileReader((String)files.get(index)));
String line = null;
int idx = 0;
while((line = reader.readLine()) != null)
{ if (line.startsWith("#"))
{
continue;
}
if (db_from_scratch)
{
if (!(line.startsWith("DROP") ||
line.startsWith("drop") ||
line.startsWith("Drop")))
{
baseArray.add(idx, line);
idx++;
}
}
else if (db_drop)
{
if ( (line.startsWith("DROP") ||
line.startsWith("drop") ||
line.startsWith("Drop")))
{
baseArray.add(idx, line);
idx++;
}
}
else
{
baseArray.add(idx, line);
idx++;
}
if(verbose)
System.out.println("While reading baseArray["+idx+"] = " + line);
}
reader.close();
}
if(verbose)
System.out.println("\nMerge Files\n");
baseArray.add("commit;");
baseArray.trimToSize();
main.writeToFile();
}
catch(FileNotFoundException ex)
{
System.err.println(ex.getMessage());
}
catch(IOException ex)
{
System.err.println(ex.getMessage());
}
catch(SecurityException ex)
{
System.err.println(ex.getMessage());
}
}
public void writeToFile() throws FileNotFoundException, IOException
{
FileOutputStream writer = null;
try
{
writer = new FileOutputStream(dest_file);
}
catch (FileNotFoundException ex)
{
File file = new File(dest_file);
writer = new FileOutputStream(file.getPath(), false);
}
writer.flush();
for (int i = 0; i < baseArray.size(); i++)
{
if(verbose)
System.out.println("While writing baseArray["+i+"] = " + baseArray.get(i));
writer.write(((String)baseArray.get(i)).getBytes());
writer.write(lineSeparator.getBytes());
writer.flush();
}
writer.close();
}
}