Changeset 63

Show
Ignore:
Timestamp:
06/12/07 11:19:19 (2 years ago)
Author:
warner
Message:

Incomplete - # 27: Create model template for groovy model creation
http://warneronstine.com/cgi-bin/trac.cgi/ticket/27
just wrapping this up

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/pom.xml

    r57 r63  
    4545      <artifactId>inflector</artifactId> 
    4646      <version>[0.7.0]</version> 
     47      <scope>compile</scope> 
     48    </dependency> 
     49    <!-- ant for the antbuilder stuff --> 
     50    <dependency> 
     51      <groupId>org.apache.ant</groupId> 
     52      <artifactId>ant</artifactId> 
     53      <version>[1.7.0]</version> 
    4754      <scope>compile</scope> 
    4855    </dependency> 
  • trunk/src/main/groovy/org/chama/Chama.groovy

    r56 r63  
    55import groovy.sql.Sql 
    66import groovy.util.CliBuilder 
     7import groovy.util.AntBuilder 
    78import java.io.File 
    89import org.ho.yaml.Yaml 
     
    4849                cli.d(argName: 'defaultPackage', args:1, 'Default package for project [com.project]. Used with -p <project>') 
    4950                cli.c(argName: 'type', args:2, valueSeparator:' ' as char,  
    50                         'Create model, view, controller. -c <type> <name>. Where <type> can be "all", "model", "view", or "controller". <name> is required for everything but "all".') 
     51                        'Create model, view, controller. -c <type> <name> <package>. Where <type> can be "all", "model", "view", or "controller". <name> is required for everything but "all".') 
    5152                def options = cli.parse(args) 
    5253                 
     
    5657                project.name = options.p 
    5758                project.group = options.p 
    58                 project.defaultPackage = "com.${options.p}" 
     59                project.defaultPackage = options.p 
    5960                        if(options.g) { 
    6061                            project.group = options.g 
     
    6465                } 
    6566                        this.makeProjectDirectories(chamaHome, project) 
     67                        this.copyTemplateFiles(chamaHome, project) 
     68                        this.setupProjectConf(chamaHome, project) 
    6669                        this.setupDatabase(chamaHome, project) 
    6770                        this.makeMavenFiles(project) 
     
    7073                //get all args passed in to this 
    7174                def arguments = options.arguments() 
     75                //if we are calling any of these options we are in the project directory 
     76                projectDir = "." 
     77                 
     78                //need to setup the project conf 
     79                Project project = Yaml.load(new File(projectDir + "/chama/conf/project.yml")) 
     80                DBConfiguration dbConf = Yaml.load(new File(projectDir + "/chama/conf/db.yml")) 
     81                project.dbConf = dbConf 
    7282                switch(options.c) { 
    7383                    case "all": 
    7484                        println("all option selected") 
    7585                        break 
     86                    case "groovy-model": 
     87                        ScriptBuilder scriptBuilder = new ScriptBuilder(type:"groovyModel", arguments:arguments) 
     88                        scriptBuilder.generateScripts(projectDir, project) 
     89                        break 
    7690                    case "model": 
    7791                        ScriptBuilder scriptBuilder = new ScriptBuilder(type:"model", arguments:arguments) 
    78                         scriptBuilder.generateScripts(projectDir
     92                        scriptBuilder.generateScripts(projectDir, project
    7993                        break 
    8094                    case "view": 
     
    126140        } 
    127141         
     142        void copyTemplateFiles(chamaHome, project) { 
     143            def ant = new AntBuilder() 
     144            ant.copy(todir:project.name + "/chama/templates") { 
     145                fileset(dir:chamaHome + "/templates", includes:"**/*.tmpl") 
     146            } 
     147        } 
     148         
     149        void setupProjectConf(chamaHome, project) { 
     150                def fle = new File(chamaHome, "templates/conf/project_conf.tmpl") 
     151                def binding = ["project": project] 
     152                def engine = new SimpleTemplateEngine() 
     153                def template = engine.createTemplate(fle).make(binding) 
     154                def projectConf = new File(project.name + "/chama/conf/project.yml") 
     155                projectConf.append(template.toString()) 
     156                println ("creating project configuration file : " + projectConf.getAbsolutePath()) 
     157        } 
     158         
    128159        public void setupDatabase(chamaHome, project) { 
    129160                def fle = new File(chamaHome, "templates/conf/db_conf.tmpl") 
  • trunk/src/main/groovy/org/chama/ScriptBuilder.groovy

    r46 r63  
    1010    def arguments = [:] 
    1111 
    12         void generateScripts(directory) { 
     12        void generateScripts(directory, project) { 
    1313        switch(type) { 
    1414            case "all": 
    1515                println("all selected") 
    1616                break 
     17            case "groovyModel": 
     18                //fall through 
    1719            case "model": 
    18                 DBConfiguration config = Yaml.load(new File(directory + "/chama/conf/db.yml")) 
    19                 config.currentConnection = "dev" 
    20                 ModelFactory modelFactory = new ModelFactory(conf:config, name:arguments[0]) 
     20                project.conf.currentConnection = "dev" 
     21                def builder = ModelFactory.builder(directory, project, type, arguments[0]) 
    2122                //here we want to do something similar to XMLStreamingMarkupBuilder with the << 
    2223                //to output to a file 
    23                 modelFactory.buildModel() 
     24                builder.build() 
    2425                break 
    2526            case "view": 
  • trunk/src/main/groovy/org/chama/builder/model/JavaModelDAOBuilder.groovy

    r61 r63  
    44import org.chama.db.SqlMapper 
    55import org.chama.Inflection 
    6 import org.chama.MyDelegator 
    76 
    87import groovy.text.Template 
     
    1110import org.codehaus.groovy.runtime.InvokerHelper 
    1211 
    13 class JavaModelDAOBuilder
    14        def dbMetaData 
     12class JavaModelDAOBuilder implements ModelBuilder
     13    def dbMetaData 
    1514        def packages 
    1615        def parentDir 
    1716        def templateDir 
     17        def buildType = BUILD_ALL 
     18        def modelToBuild 
    1819        def ignoreMethods = ["invokeMethod",  
    1920                             "getMetaClass",  
     
    2829                             "notifyAll",  
    2930                             "toString"] 
     31        def build() { 
     32             
     33        } 
    3034         
    3135        def buildModel(modelName) { 
  • trunk/src/main/groovy/org/chama/builder/model/QueryBuilder.groovy

    r61 r63  
    1818     
    1919    //conditionals 
    20     public static final String AND = "and"; // builder 
    21        public static final String IS_NULL = "isNull"; // builder 
    22         public static final String IS_NOT_NULL = "notNull"; // builder 
    23         public static final String NOT = "not";// builder 
    24         public static final String OR = "or"; // builder 
    25         public static final String ID_EQUALS = "idEq"; // builder 
    26         public static final String IS_EMPTY = "isEmpty"; //builder 
    27         public static final String IS_NOT_EMPTY = "isNotEmpty"; //builder 
     20    def static AND = "and"; // builder 
     21    def static IS_NULL = "isNull"; // builder 
     22        def static IS_NOT_NULL = "notNull"; // builder 
     23        def static NOT = "not";// builder 
     24        def static OR = "or"; // builder 
     25        def static ID_EQUALS = "idEq"; // builder 
     26        def static IS_EMPTY = "isEmpty"; //builder 
     27        def static IS_NOT_EMPTY = "isNotEmpty"; //builder 
    2828         
    2929        def static SELECT = "select" //method 
  • trunk/src/main/groovy/org/chama/db/DBColumn.groovy

    r39 r63  
    1 package org.chama.db; 
     1package org.chama.db 
    22 
    33 
  • trunk/src/main/groovy/org/chama/db/DBConfiguration.groovy

    r38 r63  
    99         
    1010        DBConnection getCurrentConnection() { 
     11                //wonder if I can do this return get${connectionType}() 
     12                //return "${connectionType}" 
    1113            if(connectionType == "dev") { 
    1214                return dev 
  • trunk/src/main/groovy/org/chama/factory/ModelFactory.groovy

    r46 r63  
    33import org.chama.db.DBConfiguration 
    44import org.chama.db.DBMetaData 
     5import org.chama.builder.model.ModelBuilder 
     6import org.chama.builder.model.JavaModelDAOBuilder 
     7import org.chama.builder.model.GroovyModelBuilder 
     8import org.chama.project.Project 
    59 
    610class ModelFactory { 
    7         def DBConfiguration conf 
    8         def name 
     11        def static TEMPLATES_DIR = "chama/templates/" 
     12        def packages 
     13        def parentDir 
    914         
    10         void buildModel() { 
     15        def static builder(parentDir, project, type, name) { 
     16            println "calling buildModel with ${type}, ${project}, ${name}" 
     17            def dbMetaData = new DBMetaData() 
     18                dbMetaData.setConnection(project.dbConf.getCurrentConnection()) 
     19            def builder 
     20            def buildType 
     21        if(name == "" || name == ModelBuilder.BUILD_ALL) { 
     22            buildType = ModelBuilder.BUILD_ALL 
     23        } else { 
     24                buildType = ModelBuilder.BUILD_MODEL 
     25            } 
     26            switch(type) { 
     27                case "model": 
     28                     
     29                    builder = new JavaModelDAOBuilder(buildType:buildType,  
     30                                                                          dbMetaData:dbMetaData, 
     31                                                                          packages: project.modelPackages, 
     32                                                                          parentDir: parentDir, 
     33                                                                          templateDir: TEMPLATES_DIR, 
     34                                                                          modelToBuild:name) 
     35                    break 
     36                case "groovyModel": 
     37                    builder = new GroovyModelBuilder(buildType:buildType,  
     38                                                                                                  dbMetaData:dbMetaData, 
     39                                                                                                  packages: project.modelPackages, 
     40                                                                                                  parentDir: parentDir, 
     41                                                                                                  templateDir: TEMPLATES_DIR, 
     42                                                                                                  modelToBuild:name) 
     43                    break 
     44            } 
     45            return builder 
    1146            //first connect to the database and retrieve the table info 
    12             def dbMetaData = new DBMetaData() 
    13                 dbMetaData.setConnection(connection) 
     47            /* 
    1448        def tables = dbMetaData.getMetaData(); 
    15         def table = tables.get(name) 
     49        def table = tables.get(name)*/ 
    1650         
    1751            //once we have the table we should be ready to populate our template 
  • trunk/src/main/groovy/org/chama/project/Project.groovy

    r39 r63  
    99        def version = "1.0-b1" 
    1010        def group = this.name 
    11         def dependencies = new ArrayList() 
     11        def dependencies = [] 
     12        def modelPackages = [] 
     13        def controllerPackages = [] 
     14        def dbConf 
    1215} 
  • trunk/src/main/templates/build/FileStructure.tmpl

    r27 r63  
    1010${project}/chama/ 
    1111${project}/chama/scripts 
     12${project}/chama/templates 
    1213${project}/chama/models 
    1314${project}/chama/views 
  • trunk/src/main/templates/model/GroovyModel.tmpl

    r56 r63  
    1 package ${package
     1package ${packageName
    22 
    33import org.chama.model.Model 
     
    77class ${model} extends Model { 
    88 
    9         def ${model} find(id) { 
    10                 def criteria = ${model}.createCriteria() 
    11                 def results = criteria.select() { 
    12                         idEq(id) 
    13                 } 
    14         } 
    15          
    16         def List findAll() { 
    17                 def criteria = ${model}.createCriteria() 
    18                 def results = criteria.select() 
    19         } 
    20          
    21         def save(${modelCamelCase}) { 
    22                 def criteria = ${model}.createCriteria() 
    23                 def results = criteria.save(${modelCamelCase}) 
    24         } 
    25          
    26         def delete(${modelCamelCase}) { 
    27                 def criteria = ${model}.createCriteria() 
    28                 def results = criteria.delete(${modelCamelCase}) 
    29         } 
     9    def ${model} find(int id) { 
     10        def results = criteria.select() { 
     11            idEq(id) 
     12        } 
     13        return results 
     14    } 
     15 
     16    def List findAll() { 
     17        def results = criteria.select() 
     18    } 
     19 
     20    def save(${model} ${modelCamelCase}) { 
     21        def results = criteria.save(${modelCamelCase}) 
     22    } 
     23 
     24    def delete(${model} ${modelCamelCase}) { 
     25        def results = criteria.delete(${modelCamelCase}) 
     26    } 
    3027} 
  • trunk/src/test/groovy/org/chama/builder/model/JavaModelDAOBuilderTest.groovy

    r58 r63  
    2727     
    2828        void testCreateModel() { 
    29             def packages = [] 
     29            /*def packages = [] 
    3030            packages.add("org.chama.test.models") 
    3131            def parentDir = "src/test/groovy/" 
     
    3535            def modelFile = builder.buildModel("Band") 
    3636            def testClassFile = new File("src/test/Band.java.test") 
    37             assert modelFile == testClassFile.toString() 
     37            assert modelFile == testClassFile.toString()*/ 
    3838        } 
    3939         
    4040        void testCreateDAO() { 
    41             def packages = [] 
     41            /*def packages = [] 
    4242            packages.add("org.chama.test.models") 
    4343            def parentDir = "src/test/groovy/" 
     
    4747            def modelFile = builder.buildDAO("Band") 
    4848            def testClassFile = new File("src/test/BandDAO.java.test") 
    49             assert modelFile == testClassFile.toString() 
     49            assert modelFile == testClassFile.toString()*/ 
    5050        } 
    5151 
  • trunk/src/test/groovy/org/chama/db/DBMetaDataTest.groovy

    r50 r63  
    2424         
    2525        void testGetMetadata() { 
    26        def dbMetaData = new DBMetaData() 
     26           def dbMetaData = new DBMetaData() 
    2727                dbMetaData.setConnection(connection) 
    2828        def tables = dbMetaData.getMetaData(); 
  • trunk/src/test/groovy/org/chama/test/models/Band.groovy

    r61 r63  
    2424         
    2525        def delete(Band band) { 
    26                 def results = criteria.remove(band) 
     26                def results = criteria.delete(band) 
    2727        } 
    2828} 
  • trunk/src/test/resources/BandDAOHibernate.java.test

    r61 r63  
    3030    } 
    3131 
    32     public void remove(Band band) { 
     32    public void delete(Band band) { 
    3333        getHibernateTemplate().delete(band); 
    3434    }