class Demoiselle

Attributes

model[RW]
output[RW]
properties[RW]

Public Class Methods

new(model=nil) click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 16
def initialize(model=nil)
        @output = Dir.pwd
        @hash = Hash.new      

        @model = model
        if !model.nil?
                @properties = Properties.load(@output)
                initialize_builders                  
        end
end

Public Instance Methods

convert_type(type) click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 107
def convert_type(type)
        Datatype.java_type(type)
end
create_project(params) click to toggle source

Cria um novo projeto

# File lib/kody/engine/demoiselle/demoiselle.rb, line 46
def create_project(params)

        create_dirs(params)
        create_properties_file(params)
        create_maven_project(params)
        #generate_pom_xml(params)

        App.logger.info "Project #{params[:project_name]} created."           
end
generate() click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 56
def generate
        generate_domain
        generate_enumerations
        generate_businnes
        generate_persistence_xml
end
generate_businnes() click to toggle source

Gera as classes da camada de negócio baseada nas entidades

# File lib/kody/engine/demoiselle/demoiselle.rb, line 89
def generate_businnes
        @entities.each do |e|                 
                generate_bc(e)
        end           
end
generate_domain() click to toggle source

Gera os Beans e os DAOs

# File lib/kody/engine/demoiselle/demoiselle.rb, line 75
def generate_domain
        @entities.each do |e|                 
                generate_class(e)
        end
end
generate_enumerations() click to toggle source

Gera as enumerações

# File lib/kody/engine/demoiselle/demoiselle.rb, line 82
def generate_enumerations
        @enumerations.each do |e|
                generate_class(e)
        end   
end
generate_persistence_xml() click to toggle source

Gera o arquivo de configuração do JPA

# File lib/kody/engine/demoiselle/demoiselle.rb, line 96
def generate_persistence_xml
        template = load_template("persistence.xml.tpl")
        path = output + "/src/main/resources/META-INF/"
        file_name = "persistence.xml"
        rendered = template.render('classes' => @entities)
        save(rendered, path, file_name)
        path = output + "/src/test/resources/META-INF/"
        save(rendered, path, file_name)       
end
generate_pom_xml(params) click to toggle source

Cria o arquivo de configuração do maven

# File lib/kody/engine/demoiselle/demoiselle.rb, line 64
def generate_pom_xml params
        template = load_template("pom.xml.tpl")
        path = output + "/" + params[:project_name] + "/" + params[:project_type] + "/"
        file_name = "pom.xml"

        rendered = template.render(
                'project' => ProjectBuilder.new(params[:project_group], params[:project_name]))
        save(rendered, path, file_name)               
end
name() click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 37
def name
        return "Demoiselle"
end
version() click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 41
def version
        return "2.3.2"
end

Private Instance Methods

create_dirs(params) click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 279
def create_dirs(params)
        path = "#{@output}/#{params[:project_name]}"          
        FileUtils.mkdir_p(path)               
        FileUtils.mkdir_p("#{path}/mda")
        FileUtils.mkdir_p("#{path}/templates")
        FileUtils.mkdir_p("#{path}/project")          
end
create_maven_project(params) click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 303
def create_maven_project(params)
        project_name = params[:project_name]
        project_group = params[:project_group]
        Dir.chdir("#{@output}/#{project_name}/project")

        command = "mvn archetype:generate -DgroupId=#{project_group} -DartifactId=#{project_name}"
        command = "#{command} -DarchetypeGroupId=br.gov.frameworkdemoiselle.archetypes"
        command = "#{command} -DarchetypeArtifactId=demoiselle-minimal"
        command = "#{command} -DarchetypeVersion=#{version} -DinteractiveMode=false"
        
        App.logger.info "Criando projeto maven..."
        system command
        if !$?.nil? && $?.exitstatus != 0
                raise "Falha ao criar o projeto com maven.\n#{command}"
        end
end
create_properties_file(params) click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 287
def create_properties_file(params)

        path = "#{@output}/#{params[:project_name]}"

        project_name = params[:project_name]
        project_group = params[:project_group]                

        properties = Hash.new
        params.each do |propertie, value|                     
                properties[propertie.gsub("_", ".")] = value
        end
        properties["project.persistence.package"] = "#{project_group}.#{project_name}.persistence"
        properties["project.business.package"] = "#{project_group}.#{project_name}.business"          
        Properties.create(path, properties)
end
generate_bc(clazz) click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 210
def generate_bc(clazz)
        if clazz.stereotype == :entity
                
                @hash['class'] = clazz

                template = load_template("businnes.tpl")
                @rendered = template.render(@hash)

                path = output + "/src/main/java/" + clazz.business_package.gsub(".", "/") + "/"      
                file_name = clazz.name + "BC.java"
                save(@rendered, path, file_name)
        end
end
generate_class(clazz) click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 155
def generate_class(clazz)

        @hash['class'] = clazz
        generate_classes(clazz)
        generate_dao(clazz)
end
generate_classes(clazz) click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 180
def generate_classes(clazz)

        case clazz.stereotype
        when :entity                  
                template = load_template("entity.tpl")
        when :enumeration
                template = load_template("enumeration.tpl")
        else
                return
        end

        @rendered = template.render(@hash)
        path = output + "/src/main/java/" + clazz.package.gsub(".", "/") + "/"        
        file_name = clazz.name + ".java"
        save(@rendered, path, file_name)              
end
generate_dao(clazz) click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 198
def generate_dao(clazz)
        if clazz.stereotype == :entity
                template = load_template("persistence.tpl")
                
                @rendered = template.render(@hash)

                path = output + "/src/main/java/" + clazz.persistence_package.gsub(".", "/") + "/"   
                file_name = clazz.name + "DAO.java"
                save(@rendered, path, file_name)
        end           
end
generate_messages(classes) click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 257
def generate_messages(classes)
        template = load_template("messages.tpl")
        @rendered = template.render('classes' => classes)

        path = output + "/src/main/resources/"
        file_name = "messages2.properties"
        
        save(@rendered, path, file_name)              
end
generate_view() click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 224
def generate_view
        template = load_template("view_mb_list.tpl")
        @rendered = template.render(@hash)

        path = output + "/src/main/java/" + clazz.view_package.gsub(".", "/") + "/"
        file_name = clazz.name + "ListMB.java"
        save(@rendered, path, file_name)

        template = load_template("view_mb_edit.tpl")
        @rendered = template.render(@hash)

        path = output + "/src/main/java/" + clazz.view_package.gsub(".", "/") + "/"
        file_name = clazz.name + "EditMB.java"
        save(@rendered, path, file_name)
end
generate_web() click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 240
def generate_web
        template = load_template("view_list.tpl")
        @hash["managed_bean"] = clazz.name.lower_camel_case + "ListMB"
        @rendered = template.render(@hash)

        path = output + "/src/main/webapp/"
        file_name = clazz.name.underscore + "_list.xhtml"
        save(@rendered, path, file_name)

        template = load_template("view_edit.tpl")
        @rendered = template.render(@hash)

        path = output + "/src/main/webapp/"
        file_name = clazz.name.underscore + "_edit.xhtml"
        save(@rendered, path, file_name)
end
initialize_builders() click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 112
def initialize_builders
        App.logger.info "Initializing builders..."

        @entities = Array.new
        @enumerations = Array.new

        @model.classes.each do |clazz|
                initialize_class(clazz)
        end           

        App.logger.info "Builders initialized"
end
initialize_class(clazz) click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 139
def initialize_class(clazz)
        
        #App.logger.debug "Class: #{clazz.name}"
        class_builder = ClassBuilder.new(clazz, self)

        case class_builder.stereotype
        when :entity
                @entities << class_builder
        when :enumeration
                @enumerations << class_builder
        else
                return
        end           
end
initialize_package(package) click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 126
def initialize_package(package)        
        
        #App.logger.debug "Package: #{package.name}"
        package.classes.sort.each do |c|
                initialize_class(c)
        end
        
        package.packages.sort.each do |p|
                initialize_package(p)
        end
end
load_template(template_name) click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 163
def load_template(template_name)
        @templates = Hash.new if @templates.nil?
        return @templates[template_name] if !(@templates[template_name]).nil?         

        full_template_name = File.expand_path File.dirname(__FILE__) + "/templates/" + template_name
        arquivo_template = File.read(full_template_name)
        template = Liquid::Template.parse(arquivo_template)
        Liquid::Template.register_filter(TextFilter)

        @templates[template_name] = template

        App.logger.info "Template '#{template_name}' loaded..."

        return template
end
save(content, path, file_name) click to toggle source
# File lib/kody/engine/demoiselle/demoiselle.rb, line 269
def save(content, path, file_name)     
        FileUtils.mkdir_p(path) unless File.exists?(path)
        
        file = File.new("#{path}#{file_name}", "w")
        file.write(content)
        file.close

        App.logger.debug "Template saved in #{path}#{file_name}"
end