Coverage Report - net.sourceforge.addam.ddlgen.GeneratorSpec
 
Classes in this File Line Coverage Branch Coverage Complexity
GeneratorSpec
20%
20/101
24%
4/17
0
 
 1  
 /*
 2  
  * Copyright (c) 2004 International Decision Systems, Inc.  All Rights Reserved.
 3  
  *
 4  
  * By using this Software, You acknowledge that the Software is a valuable asset
 5  
  * and trade secret of either International Decision Systems, Inc. ("IDSI") or a
 6  
  * third party supplier of IDSI and constitutes confidential and proprietary
 7  
  * information.
 8  
  *
 9  
  * NEITHER IDSI NOR ANY AGENT OR PERSON ACTING FOR OR WITH IDSI HAS MADE OR DOES
 10  
  * MAKE ANY STATEMENTS, AFFIRMATIONS, REPRESENTATIONS OR WARRANTIES WHATSOEVER
 11  
  * TO YOU, WHETHER EXPRESS OR IMPLIED, AS TO THE SOFTWARE, THE QUALITY OR
 12  
  * CONDITION OF THE SOFTWARE, OR THE OPERATING CHARACTERISTICS OR RELIABILITY OF
 13  
  * THE SOFTWARE, OR ITS SUITABILITY FOR ANY GENERAL OR PARTICULAR PURPOSE, OR AS
 14  
  * TO ANY OTHER MATTER WHATSOEVER; ANY AND ALL OTHER WARRANTIES INCLUDING
 15  
  * WITHOUT LIMITATION ANY WARRANTIES IMPLIED BY LAW, SUCH AS THE IMPLIED
 16  
  * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND TITLE,
 17  
  * USE AND NON-INFRINGEMENT; ARE HEREBY EXPRESSLY DISCLAIMED AND EXCLUDED.
 18  
 */
 19  
 package net.sourceforge.addam.ddlgen;
 20  
 
 21  
 import org.apache.tools.ant.BuildException;
 22  
 
 23  
 import java.io.*;
 24  
 import java.util.ArrayList;
 25  
 import java.util.List;
 26  
 import java.util.ResourceBundle;
 27  
 import java.util.regex.Pattern;
 28  
 
 29  
 /**
 30  
  * Used to define what the output files written by a generator, allows include/exclude for specific
 31  
  * objects, and can generate a master script based on the objects generated.
 32  
  * Date: Nov 11, 2004
 33  
  */
 34  12
 public class GeneratorSpec implements Filter {
 35  
 
 36  
     public void setType(String type) {
 37  0
         this.type = type;
 38  0
     }
 39  
 
 40  
     public void setVendor(String vendor) {
 41  0
         this.vendor = vendor;
 42  0
     }
 43  
 
 44  
     public void setMasterScript(String file) {
 45  0
         this.masterScript = file;
 46  0
     }
 47  
 
 48  
     public void setPrefix(String prefix) {
 49  20
         if (prefix == null) prefix = "";
 50  20
         this.prefix = prefix;
 51  20
     }
 52  
 
 53  
     public void setExtension(String extension) {
 54  20
         if (extension == null) extension = "";
 55  20
         this.extension = extension;
 56  20
     }
 57  
 
 58  
     public void setIncludes(String includes) {
 59  0
         String[] includeArray = includes.split(",");
 60  0
         for (String anIncludeArray : includeArray) {
 61  0
             Table table = new Table();
 62  0
             table.setName(anIncludeArray);
 63  0
             addConfiguredInclude(table);
 64  
         }
 65  0
     }
 66  
 
 67  
     public void setIncludesPattern(String pattern) {
 68  0
         includesPattern = Pattern.compile(pattern);
 69  0
     }
 70  
 
 71  
     public void setIncludesFile(File includesFile) {
 72  
         try {
 73  0
             BufferedReader reader = new BufferedReader(new FileReader(includesFile));
 74  0
             for (String line = reader.readLine(); line != null; line = reader.readLine()) {
 75  0
                 Table table = new Table();
 76  0
                 table.setName(line);
 77  0
                 addConfiguredInclude(table);
 78  
             }
 79  0
         } catch (FileNotFoundException e) {
 80  0
             throw new BuildException("file not found:" + includesFile.getAbsolutePath());
 81  0
         } catch (IOException e) {
 82  0
             throw new BuildException("error reading file:" + includesFile.getAbsolutePath());
 83  0
         }
 84  0
     }
 85  
 
 86  
     public void setExcludes(String excludes) {
 87  0
         String[] excludeArray = excludes.split(",");
 88  0
         for (String anExcludeArray : excludeArray) {
 89  0
             Table table = new Table();
 90  0
             table.setName(anExcludeArray);
 91  0
             addConfiguredExclude(table);
 92  
         }
 93  0
     }
 94  
 
 95  
     public void setExcludesPattern(String pattern) {
 96  0
         excludesPattern = Pattern.compile(pattern);
 97  0
     }
 98  
 
 99  
     public void setExcludesFile(File excludesFile) {
 100  
         try {
 101  0
             BufferedReader reader = new BufferedReader(new FileReader(excludesFile));
 102  0
             for (String line = reader.readLine(); line != null;) {
 103  0
                 Table table = new Table();
 104  0
                 table.setName(line);
 105  0
                 addConfiguredInclude(table);
 106  0
             }
 107  0
         } catch (FileNotFoundException e) {
 108  0
             throw new BuildException("file not found:" + excludesFile.getAbsolutePath());
 109  0
         } catch (IOException e) {
 110  0
             throw new BuildException("error reading file:" + excludesFile.getAbsolutePath());
 111  0
         }
 112  0
     }
 113  
 
 114  
     public void setDir(String dir) {
 115  20
         this.dir = dir;
 116  20
     }
 117  
 
 118  
     public void addConfiguredInclude(Table table) {
 119  0
         includedTables.add(table.getName().trim());
 120  0
     }
 121  
 
 122  
     public void addConfiguredExclude(Table table) {
 123  0
         excludedTables.add(table.getName().trim());
 124  0
     }
 125  
 
 126  
     public boolean includes(String objectName) {
 127  0
         boolean includes = true;
 128  0
         boolean excludes = false;
 129  0
         String normalizedTableName = objectName.trim();
 130  0
         if (!includedTables.isEmpty()) {
 131  0
             includes = includedTables.contains(normalizedTableName);
 132  
         }
 133  0
         if (!includes && includesPattern != null) {
 134  0
             includes = includesPattern.matcher(objectName).matches();
 135  
         }
 136  0
         if (!excludedTables.isEmpty()) {
 137  0
             excludes = excludedTables.contains(normalizedTableName);
 138  
         }
 139  0
         if (!excludes && excludesPattern != null) {
 140  0
             excludes = excludesPattern.matcher(objectName).matches();
 141  
         }
 142  0
         return includes && !excludes;
 143  
     }
 144  
 
 145  
     public String getVendor() {
 146  0
         return vendor;
 147  
     }
 148  
 
 149  
     public Generator getGenerator() throws Exception {
 150  
         String classname;
 151  
         try {
 152  0
             ResourceBundle bundle = ResourceBundle.getBundle("net.sourceforge.addam.ddlgen.RegisteredGenerators");
 153  0
             classname = bundle.getString(type.toLowerCase());
 154  0
         } catch (Exception e) {
 155  0
             throw new BuildException("invalid type: " + type);
 156  0
         }
 157  0
         return (Generator)Class.forName(classname).newInstance();
 158  
     }
 159  
 
 160  
     public FileWriter getMasterScriptWriter() throws IOException {
 161  0
         File scriptDir = new File(dir);
 162  0
         if (masterScriptWriter == null && masterScript != null) {
 163  0
             if (!scriptDir.exists()) {
 164  0
                 scriptDir.mkdirs();
 165  
             }
 166  0
             masterScriptWriter = new FileWriter(new File(scriptDir,masterScript));
 167  
         }
 168  0
         return masterScriptWriter;
 169  
     }
 170  
 
 171  
     public String getFileName(String tableName) {
 172  
         // prepend a . on the suffix if the extension doesn't start with one
 173  20
         String suffix = extension;
 174  20
         if (suffix.length() > 0 && !suffix.startsWith(".")) {
 175  16
             suffix = "." + suffix;
 176  
         }
 177  20
         if (tableName == null) tableName = "";
 178  20
         return prefix + tableName + suffix;
 179  
     }
 180  
 
 181  
     public File getFile(String tableName) {
 182  20
         return new File(dir, getFileName(tableName));
 183  
     }
 184  
 
 185  
     public FileWriter getFileWriter(String object) throws IOException {
 186  
         // prepend a . on the suffix if the extension doesn't start with one
 187  0
         String suffix = extension;
 188  0
         if (suffix.length() > 0 && !suffix.startsWith(".")) {
 189  0
             suffix = "." + suffix;
 190  
         }
 191  0
         File file = new File(dir, prefix + object + suffix);
 192  0
         File dir = file.getParentFile();
 193  0
         if (!dir.exists()) dir.mkdirs();
 194  0
         return new FileWriter(file);
 195  
     }
 196  
 
 197  
     private String dir;
 198  
     private String type;
 199  8
     private String prefix = "";
 200  8
     private String extension = "";
 201  
     private String vendor;
 202  
     private String masterScript;
 203  8
     private FileWriter masterScriptWriter = null;
 204  8
     private final List<String> includedTables = new ArrayList<String>();
 205  8
     private final List<String> excludedTables = new ArrayList<String>();
 206  
     private Pattern includesPattern;
 207  
     private Pattern excludesPattern;
 208  
 }