1
1
1nd1go2013-09-13 12:26:37
Grails
1nd1go, 2013-09-13 12:26:37

DSL, can't figure it out?

Hey!
I would like to make life easier for myself and replace the UI for the configuration of one object with a text mode with DSL.
Those. I see it this way. I need to get a correctly filled Java DTO at the output, which contains different objects, which in turn contain other objects.

public class Car {
    private Engine engine;
    private List<Wheel> wheels;
    private List<Door> doors;
    private Map<String, String> somethingToSomething;
    //...
}
class Engine {
    private double litres;
    private List<Cylinder> cylinders;
    //...
}
//...

At the input, I would like something textual, which I then request and get a DTO. At first glance, JSON with Jackson Unmarshaller will do:
{
  "car" : {
    "engine" : {
        "litres" : "1.6",
        "cylinders" : ["one", "two", "three"]
    }
    "doors" : ["left-front", "left-rear", ...]
  }
}

but I understand that groovy will be able to give me some more flexible and informative things for input validation, for example, if there should be some dependencies between the fields.
Gentlemen, how would you see such a dsl input on a groove? And how can I actually get my java DTO filled out from this DSL?
Thanks

Answer the question

In order to leave comments, you need to log in

2 answer(s)
M
Maxim, 2013-09-15
@1nd1go

Then you can look in GRAILS - BuildConfig.groovy, for example, json itself:

grails.servlet.version = "3.0" // Change depending on target container compliance (2.5 or 3.0)
grails.project.class.dir = "target/classes"
grails.project.test.class.dir = "target/test-classes"
grails.project.test.reports.dir = "target/test-reports"
grails.project.work.dir = "target/work"
grails.project.target.level = 1.6
grails.project.source.level = 1.6
//grails.project.war.file = "target/${appName}-${appVersion}.war"

grails.project.fork = [
    // configure settings for compilation JVM, note that if you alter the Groovy version forked compilation is required
    //  compile: [maxMemory: 256, minMemory: 64, debug: false, maxPerm: 256, daemon:true],

    // configure settings for the test-app JVM, uses the daemon by default
    test: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, daemon:true],
    // configure settings for the run-app JVM
    run: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, forkReserve:false],
    // configure settings for the run-war JVM
    war: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, forkReserve:false],
    // configure settings for the Console UI JVM
    console: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256]
]

grails.project.dependency.resolver = "maven" // or ivy
grails.project.dependency.resolution = {
    // inherit Grails' default dependencies
    inherits("global") {
        excludes 'grails-plugin-log4j'
        // specify dependency exclusions here; for example, uncomment this to disable ehcache:
        // excludes 'ehcache'
    }
    log "error" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose'
    checksums true // Whether to verify checksums on resolve
    legacyResolve false // whether to do a secondary resolve on plugin installation, not advised and here for backwards compatibility

    repositories {
        inherits true // Whether to inherit repository definitions from plugins

        grailsPlugins()
        grailsHome()
        mavenLocal()
        grailsCentral()
        mavenCentral()
        // uncomment these (or add new ones) to enable remote dependency resolution from public Maven repositories
        //mavenRepo "http://repository.codehaus.org"
        //mavenRepo "http://download.java.net/maven/2/"
        //mavenRepo "http://repository.jboss.com/maven2/"
    }

    dependencies {
        // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes e.g.
        // runtime 'mysql:mysql-connector-java:5.1.24'
        compile 'ch.qos.logback:logback-classic:1.0.6'
        runtime 'ch.qos.logback:logback-classic:1.0.6'
    }

    plugins {
        // plugins for the build system only
        build ":tomcat:7.0.42"

        // plugins for the compile step
        compile ":scaffolding:2.0.0"
        compile ':cache:1.1.1'

        // plugins needed at runtime but not for compilation
        runtime ":hibernate:3.6.10.1" // or ":hibernate4:4.1.11.1"
        runtime ":database-migration:1.3.5"
        runtime ":jquery:1.10.2"
        runtime ":resources:1.2"
        // Uncomment these (or add new ones) to enable additional resources capabilities
        //runtime ":zipped-resources:1.0.1"
        //runtime ":cached-resources:1.1"
        //runtime ":yui-minify-resources:0.1.5"
    }
}

M
Maxim, 2013-09-14
@mgramin

And how can I actually get my java DTO filled out from this DSL?

habrahabr.ru/qa/45562/
Gentlemen, how would you see such a dsl input on a groove?

here is a good article about groovy dsl - habrahabr.ru/post/145138/

Similar questions

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question