Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 8

Code for Grails Quick Start

Member.groovy package maestro class Member { String username; String name; String email; String address; static constraints = { username(blank:false, unique:true) name(blank: false) email() address() } static hasMany = [ordersAsSeller: PurchaseOrder, ordersAsBuyer: PurchaseOrder] static mappedBy = [ordersAsSeller: 'seller', ordersAsBuyer: 'buyer'] String toString() { return name; } }

PurchaseOrder.groovy package maestro class PurchaseOrder { Member seller; Member buyer; String item; float price;

static constraints = { seller(blank:false) buyer(blank:false) item(blank:false) price(blank:false) } static belongsTo = [seller: Member, buyer: Member] String toString() { return item + " for " + price } }

MemberController.groovy package maestro class MemberController { def scaffold = true } What? Thats it?????

PurchaseController.groovy package maestro class PurchaseOrderController { def scaffold = true }

BootStrap.groovy import maestro.Member

import maestro.PurchaseOrder class BootStrap { def init = { servletContext -> // members def misha = new Member(username:"misha", name: "Misha Gavryuchkov", email: "mg@e.com", address: "Sunnyvale").save() def ravi = new Member(username:"ravi", name: "Ravi Hiremath", email: "rh@e.com", address: "Sunnyvale").save() def omkar = new Member(username:"omkar", name: "Omkar Pendse", email: "op@e.com", address: "Bay Area").save() def smitha = new Member(username:"smitha", name: "Smitha Chennu", email: "sc@e.com", address: "South Bay").save() // purchase orders def iphoneCase = new PurchaseOrder(seller: ravi, buyer: misha, item: "iPhone Case", price: 0.99).save() def acuraMDX = new PurchaseOrder(seller: omkar, buyer: ravi, item: "Shiny Acura MDX, 7-seater", price: 53000.99).save() } def destroy = { } }

UrlMappings.groovy class UrlMappings { static mappings = { "/$controller/$action?/$id?"{ constraints { // apply constraints here } } //"/"(view:"/index") "/"(controller:"member",action:"list") "500"(view:'/error') }

Logo changes 1. Copy the following file to <app-home>/web-app/images

2. Change one line in <app-home>/web-app/css/main.css #grailsLogo { padding:1px; } 3. Change one line in <app-home>/grails-app/views/layouts/main.gsp <div id="grailsLogo"><g:link action="index" controller="member"><img src="$ {resource(dir:'images',file:'maestro-logo.jpg')}" alt="Grails" border="0" height="120" /></g:link></a></div>

Grails is not a toy

MemberService.groovy

package maestro import javax.jws.* class MemberService { static expose=['cxf'] static transactional = true MemberDTO findUser(String p_username) { println(p_username); Member member = Member.findByUsername(p_username); return new MemberDTO(username:member.username, name:member.name, email:member.email, address:member.address); } List<MemberDTO> findUsers() { def members = Member.findAll(); def memberDTOs = new ArrayList<MemberDTO>(); for (Member member : members) { memberDTOs.add( new MemberDTO(username:member.username, name:member.name, email:member.email, address:member.address) ); } return memberDTOs; } } * - findByUsername - GORM, implicit mapping ** - look Ma, this is Java!

MemberDTO.groovy package maestro import javax.xml.bind.annotation.*; @XmlAccessorType(XmlAccessType.FIELD) class MemberDTO { String username;

String name; String email; String address; }

soapUI request 1 (findUser) <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:maes="http://maestro/"> <soapenv:Header/> <soapenv:Body> <maes:findUser> p_username>misha</p_username> </maes:findUser> </soapenv:Body> </soapenv:Envelope>

and response 1 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns1:findUserResponse xmlns:ns1="http://maestro/"> <return> <username>misha</username> <name>Misha Gavryuchkov</name> <email>mg@e.com</email> <address>Sunnyvale</address> </return> </ns1:findUserResponse> </soap:Body> </soap:Envelope>

soapUI request 2 (findUsers) <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:maes="http://maestro/"> <soapenv:Header/> <soapenv:Body> <maes:findUsers/> </soapenv:Body> </soapenv:Envelope>

soapUI response2

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns1:findUsersResponse xmlns:ns1="http://maestro/"> <return> <username>misha</username> <name>Misha Gavryuchkov</name> <email>mg@e.com</email> <address>Sunnyvale</address> </return> <return> <username>ravi</username> <name>Ravi Hiremath</name> <email>rh@e.com</email> <address>Sunnyvale</address> </return> <return> <username>omkar</username> <name>Omkar Pendse</name> <email>op@e.com</email> <address>Bay Area</address> </return> <return> <username>smitha</username> <name>Smitha Chennu</name> <email>sc@e.com</email> <address>South Bay</address> </return> <return> <username>narendra</username> <name>Narendra Kurra</name> <email>nk@e.com</email> <address>Bay Area</address> </return> <return> <username>milo</username> <name>Milo Cvjetinovic</name> <email>mc@e.com</email> <address>Bay Area</address> </return> <return> <username>sumita</username> <name>Sumita Ravindran</name> <email>sr@e.com</email> <address>Bay Area Too</address> </return> </ns1:findUsersResponse> </soap:Body> </soap:Envelope>

Member.groovy changes for JSON API package maestro class Member {

String username; String name; String email; String address; static constraints = { username(blank:false, unique:true) name(blank:false) email() address() } static hasMany = [ordersAsSeller: PurchaseOrder, ordersAsBuyer: PurchaseOrder] static mappedBy = [ordersAsSeller: 'seller', ordersAsBuyer: 'buyer'] String toString() { return name; } static expose = 'member' static api = [ excludedFields: ["ordersAsBuyer", "ordersAsSeller"], list: { params -> Member.list(params) }, count: { params -> Member.count() } ] }

You might also like