/******************************************************************************* * Copyright (c) 2004, 2007 IBM Corporation and Cambridge Semantics Incorporated. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * File: $Source: /cvsroot/slrp/common/com.ibm.adtech.jdbc.utils/src/com/ibm/adtech/jdbc/utils/opgen/ant/DDLTask.java,v $ * Created by: Joe Betz * Created on: 9/30/2005 * Revision: $Id: DDLTask.java 176 2007-07-31 14:22:30Z mroy $ * * Contributors: * IBM Corporation - initial API and implementation * C Semantics Incorporated - Fork to Anzo *******************************************************************************/ package org.openanzo.jdbc.opgen.ant; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.io.Reader; import java.io.Writer; import java.util.ArrayList; import java.util.List; import java.util.Vector; import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.Task; import org.apache.tools.ant.types.FileSet; /** * Provides file listings and procedure names of DDL. * * @author Joe Betz * */ public class DDLTask extends Task { private List<FileSet> fileSets = new Vector<FileSet>(); String procedureName; List<String> params = new ArrayList<String>(6); /** * Add set of files to task * * @param fileSet * set of files to process */ public void addFileset(FileSet fileSet) { fileSets.add(fileSet); } /** * Get the set of files to process * * @return the set of files to process */ public List<FileSet> getFiles() { return fileSets; } /** * Get the name of the procedure * * @return the name of the procedure */ public String getProcedure() { return procedureName; } /** * Set the name of the procedure * * @param procedure * the name of the procedure */ public void setProcedure(String procedure) { this.procedureName = procedure; } /** * Set the A parameter * * @param paramA * the A parameter */ public void setA(String paramA) { params.add(0, paramA); } /** * Set the B parameter * * @param paramB * the B parameter */ public void setB(String paramB) { params.add(1, paramB); } /** * Set the C parameter * * @param paramC * the C parameter */ public void setC(String paramC) { params.add(2, paramC); } /** * Set the D parameter * * @param paramD * the D parameter */ public void setD(String paramD) { params.add(3, paramD); } /** * Set the E parameter * * @param paramE * the E parameter */ public void setE(String paramE) { params.add(4, paramE); } /** * Set the F parameter * * @param paramF * the A parameter */ public void setF(String paramF) { params.add(5, paramF); } /** * Get the template parameters for this statement * * @return the template parameters for this statement */ public String[] getParams() { if (params.isEmpty() || params.get(0) == null) { return new String[] {}; } int i; for (i = 1; i < params.size(); i++) { if (params.get(i) == null) { System.err.println(params.get(i)); break; } } return params.subList(0, i).toArray(new String[i]); } @Override public void execute() { } /** * Write the DDL output to a file * * @param writer * output writer for task * @param outputFormat * format to write * @throws IOException * @throws FileNotFoundException */ public void write(Writer writer, String outputFormat) throws IOException, FileNotFoundException { writer.write(getProcedure() + "="); for (FileSet set : getFiles()) { DirectoryScanner ds = set.getDirectoryScanner(getProject()); String files[] = ds.getIncludedFiles(); String base = ds.getBasedir().getAbsolutePath(); for (int i = 0; i < files.length; i++) { String filename = files[i]; String file = base + "/" + filename; writeFile(writer, filename, file, outputFormat); } } writer.write("\n"); } private void writeFile(Writer writer, String filename, String file, String outputFormat) throws FileNotFoundException, IOException { Reader in = new InputStreamReader(new FileInputStream(file), "UTF-8"); LineNumberReader lnr = new LineNumberReader(in); StringBuilder content = new StringBuilder(); String line; while ((line = lnr.readLine()) != null) { line = StringUtils.trim(line); if (line.length() == 0 || line.startsWith("#")) continue; line = Pattern.compile("[\\s+]", Pattern.MULTILINE).matcher(line).replaceAll(" "); line = Pattern.compile(";+", Pattern.MULTILINE).matcher(line).replaceAll(";;"); line = Pattern.compile("&sc", Pattern.MULTILINE).matcher(line).replaceAll(";"); line = Pattern.compile("&plus", Pattern.MULTILINE).matcher(line).replaceAll("+"); content.append(line); content.append(" "); } writer.write(content.toString()); in.close(); lnr.close(); } }