diff --git a/applications/loanshark/pom.xml b/applications/loanshark/pom.xml index 5c0ef607..7ffc9034 100644 --- a/applications/loanshark/pom.xml +++ b/applications/loanshark/pom.xml @@ -7,7 +7,6 @@ Spring Integration Loan Shark Sample war - 1.1.0.M3 3.0.5.RELEASE 1.6.10 1.6.1 @@ -24,12 +23,7 @@ Spring Maven Milestone Repository http://maven.springframework.org/milestone - - spring-roo-repository - Spring Roo Repository - http://spring-roo-repository.springsource.org/release - - + JBoss Repo https://repository.jboss.org/nexus/content/repositories/releases JBoss Repo @@ -46,11 +40,6 @@ Spring Maven Milestone Repository http://maven.springframework.org/milestone - - spring-roo-repository - Spring Roo Repository - http://spring-roo-repository.springsource.org/release - @@ -96,13 +85,6 @@ flexjson 2.0 - - - org.springframework.roo - org.springframework.roo.annotations - ${roo.version} - provided - org.springframework @@ -474,8 +456,6 @@ - org.eclipse.ajdt.ui.ajnature - com.springsource.sts.roo.core.nature org.springframework.ide.eclipse.core.springnature diff --git a/applications/loanshark/src/main/java/org/springframework/integration/samples/loanbroker/loanshark/domain/LoanShark.java b/applications/loanshark/src/main/java/org/springframework/integration/samples/loanbroker/loanshark/domain/LoanShark.java index 470cffa8..391d63e8 100644 --- a/applications/loanshark/src/main/java/org/springframework/integration/samples/loanbroker/loanshark/domain/LoanShark.java +++ b/applications/loanshark/src/main/java/org/springframework/integration/samples/loanbroker/loanshark/domain/LoanShark.java @@ -1,14 +1,27 @@ package org.springframework.integration.samples.loanbroker.loanshark.domain; -import javax.persistence.Entity; -import org.springframework.roo.addon.javabean.RooJavaBean; -import org.springframework.roo.addon.tostring.RooToString; -import org.springframework.roo.addon.entity.RooEntity; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EntityManager; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.PersistenceContext; +import javax.persistence.Query; +import javax.persistence.Version; + +import org.springframework.beans.factory.annotation.Configurable; +import org.springframework.transaction.annotation.Transactional; + +import flexjson.JSONDeserializer; +import flexjson.JSONSerializer; + +@Configurable @Entity -@RooJavaBean -@RooToString -@RooEntity(finders = { "findLoanSharksByName" }) public class LoanShark { private String name; @@ -16,4 +29,146 @@ public class LoanShark { private Long counter; private Double averageRate; + + public String toJson() { + return new JSONSerializer().exclude("*.class").serialize(this); + } + + public static LoanShark fromJsonToLoanShark(String json) { + return new JSONDeserializer().use(null, LoanShark.class).deserialize(json); + } + + public static String toJsonArray(Collection collection) { + return new JSONSerializer().exclude("*.class").serialize(collection); + } + + public static Collection fromJsonArrayToLoanSharks(String json) { + return new JSONDeserializer>().use(null, ArrayList.class).use("values", LoanShark.class).deserialize(json); + } + + @PersistenceContext + transient EntityManager entityManager; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "id") + private Long id; + + @Version + @Column(name = "version") + private Integer version; + + public Long getId() { + return this.id; + } + + public void setId(Long id) { + this.id = id; + } + + public Integer getVersion() { + return this.version; + } + + public void setVersion(Integer version) { + this.version = version; + } + + @Transactional + public void persist() { + if (this.entityManager == null) this.entityManager = entityManager(); + this.entityManager.persist(this); + } + + @Transactional + public void remove() { + if (this.entityManager == null) this.entityManager = entityManager(); + if (this.entityManager.contains(this)) { + this.entityManager.remove(this); + } else { + LoanShark attached = this.entityManager.find(this.getClass(), this.id); + this.entityManager.remove(attached); + } + } + + @Transactional + public void flush() { + if (this.entityManager == null) this.entityManager = entityManager(); + this.entityManager.flush(); + } + + @Transactional + public LoanShark merge() { + if (this.entityManager == null) this.entityManager = entityManager(); + LoanShark merged = this.entityManager.merge(this); + this.entityManager.flush(); + return merged; + } + + public static final EntityManager entityManager() { + EntityManager em = new LoanShark().entityManager; + if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)"); + return em; + } + + public static long countLoanSharks() { + return ((Number) entityManager().createQuery("select count(o) from LoanShark o").getSingleResult()).longValue(); + } + + @SuppressWarnings("unchecked") + public static List findAllLoanSharks() { + return entityManager().createQuery("select o from LoanShark o").getResultList(); + } + + public static LoanShark findLoanShark(Long id) { + if (id == null) return null; + return entityManager().find(LoanShark.class, id); + } + + @SuppressWarnings("unchecked") + public static List findLoanSharkEntries(int firstResult, int maxResults) { + return entityManager().createQuery("select o from LoanShark o").setFirstResult(firstResult).setMaxResults(maxResults).getResultList(); + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getCounter() { + return this.counter; + } + + public void setCounter(Long counter) { + this.counter = counter; + } + + public Double getAverageRate() { + return this.averageRate; + } + + public void setAverageRate(Double averageRate) { + this.averageRate = averageRate; + } + + public static Query findLoanSharksByName(String name) { + if (name == null || name.length() == 0) throw new IllegalArgumentException("The name argument is required"); + EntityManager em = LoanShark.entityManager(); + Query q = em.createQuery("SELECT LoanShark FROM LoanShark AS loanshark WHERE loanshark.name = :name"); + q.setParameter("name", name); + return q; + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("Id: ").append(getId()).append(", "); + sb.append("Version: ").append(getVersion()).append(", "); + sb.append("Name: ").append(getName()).append(", "); + sb.append("Counter: ").append(getCounter()).append(", "); + sb.append("AverageRate: ").append(getAverageRate()); + return sb.toString(); + } } diff --git a/applications/loanshark/src/main/java/org/springframework/integration/samples/loanbroker/loanshark/web/SharkController.java b/applications/loanshark/src/main/java/org/springframework/integration/samples/loanbroker/loanshark/web/SharkController.java index 8d391916..3572b9fa 100644 --- a/applications/loanshark/src/main/java/org/springframework/integration/samples/loanbroker/loanshark/web/SharkController.java +++ b/applications/loanshark/src/main/java/org/springframework/integration/samples/loanbroker/loanshark/web/SharkController.java @@ -1,12 +1,138 @@ package org.springframework.integration.samples.loanbroker.loanshark.web; -import org.springframework.roo.addon.web.mvc.controller.RooWebScaffold; -import org.springframework.integration.samples.loanbroker.loanshark.domain.LoanShark; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.stereotype.Controller; +import javax.validation.Valid; + +import org.springframework.core.convert.converter.Converter; +import org.springframework.core.convert.support.GenericConversionService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.integration.samples.loanbroker.loanshark.domain.LoanShark; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; -@RooWebScaffold(path = "loansharks", formBackingObject = LoanShark.class) @RequestMapping("/loansharks") @Controller public class SharkController { + + @RequestMapping(method = RequestMethod.POST) + public String create(@Valid LoanShark loanShark, BindingResult result, Model model) { + if (result.hasErrors()) { + model.addAttribute("loanShark", loanShark); + return "loansharks/create"; + } + loanShark.persist(); + return "redirect:/loansharks/" + loanShark.getId(); + } + + @RequestMapping(params = "form", method = RequestMethod.GET) + public String createForm(Model model) { + model.addAttribute("loanShark", new LoanShark()); + return "loansharks/create"; + } + + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + public String show(@PathVariable("id") Long id, Model model) { + model.addAttribute("loanshark", LoanShark.findLoanShark(id)); + model.addAttribute("itemId", id); + return "loansharks/show"; + } + + @RequestMapping(method = RequestMethod.GET) + public String list(@RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size, Model model) { + if (page != null || size != null) { + int sizeNo = size == null ? 10 : size.intValue(); + model.addAttribute("loansharks", LoanShark.findLoanSharkEntries(page == null ? 0 : (page.intValue() - 1) * sizeNo, sizeNo)); + float nrOfPages = (float) LoanShark.countLoanSharks() / sizeNo; + model.addAttribute("maxPages", (int) ((nrOfPages > (int) nrOfPages || nrOfPages == 0.0) ? nrOfPages + 1 : nrOfPages)); + } else { + model.addAttribute("loansharks", LoanShark.findAllLoanSharks()); + } + return "loansharks/list"; + } + + @RequestMapping(method = RequestMethod.PUT) + public String update(@Valid LoanShark loanShark, BindingResult result, Model model) { + if (result.hasErrors()) { + model.addAttribute("loanShark", loanShark); + return "loansharks/update"; + } + loanShark.merge(); + return "redirect:/loansharks/" + loanShark.getId(); + } + + @RequestMapping(value = "/{id}", params = "form", method = RequestMethod.GET) + public String updateForm(@PathVariable("id") Long id, Model model) { + model.addAttribute("loanShark", LoanShark.findLoanShark(id)); + return "loansharks/update"; + } + + @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) + public String delete(@PathVariable("id") Long id, @RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size, Model model) { + LoanShark.findLoanShark(id).remove(); + model.addAttribute("page", (page == null) ? "1" : page.toString()); + model.addAttribute("size", (size == null) ? "10" : size.toString()); + return "redirect:/loansharks?page=" + ((page == null) ? "1" : page.toString()) + "&size=" + ((size == null) ? "10" : size.toString()); + } + + @RequestMapping(params = { "find=ByName", "form" }, method = RequestMethod.GET) + public String findLoanSharksByNameForm(Model model) { + return "loansharks/findLoanSharksByName"; + } + + @RequestMapping(params = "find=ByName", method = RequestMethod.GET) + public String findLoanSharksByName(@RequestParam("name") String name, Model model) { + model.addAttribute("loansharks", LoanShark.findLoanSharksByName(name).getResultList()); + return "loansharks/list"; + } + + Converter getLoanSharkConverter() { + return new Converter() { + public String convert(LoanShark loanShark) { + return new StringBuilder().append(loanShark.getName()).append(" ").append(loanShark.getCounter()).append(" ").append(loanShark.getAverageRate()).toString(); + } + }; + } + + @InitBinder + void registerConverters(WebDataBinder binder) { + if (binder.getConversionService() instanceof GenericConversionService) { + GenericConversionService conversionService = (GenericConversionService) binder.getConversionService(); + conversionService.addConverter(getLoanSharkConverter()); + } + } + + @RequestMapping(value = "/{id}", method = RequestMethod.GET, headers = "Accept=application/json") + @ResponseBody + public String showJson(@PathVariable("id") Long id) { + return LoanShark.findLoanShark(id).toJson(); + } + + @RequestMapping(method = RequestMethod.POST, headers = "Accept=application/json") + public ResponseEntity createFromJson(@RequestBody String json) { + LoanShark.fromJsonToLoanShark(json).persist(); + return new ResponseEntity("LoanShark created", HttpStatus.CREATED); + } + + @RequestMapping(headers = "Accept=application/json") + @ResponseBody + public String listJson() { + return LoanShark.toJsonArray(LoanShark.findAllLoanSharks()); + } + + @RequestMapping(value = "/jsonArray", method = RequestMethod.POST, headers = "Accept=application/json") + public ResponseEntity createFromJsonArray(@RequestBody String json) { + for (LoanShark loanshark: LoanShark.fromJsonArrayToLoanSharks(json)) { + loanshark.persist(); + } + return new ResponseEntity("LoanShark created", HttpStatus.CREATED); + } } diff --git a/applications/loanshark/src/main/resources/log4j.properties b/applications/loanshark/src/main/resources/log4j.properties index dcbdb027..bbc1eca8 100644 --- a/applications/loanshark/src/main/resources/log4j.properties +++ b/applications/loanshark/src/main/resources/log4j.properties @@ -2,11 +2,5 @@ #Tue Sep 07 17:11:52 EDT 2010 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.rootLogger=DEBUG, stdout -log4j.appender.R.File=application.log -log4j.appender.R.MaxFileSize=100KB -log4j.appender.R.layout=org.apache.log4j.PatternLayout -log4j.appender.R.MaxBackupIndex=1 -log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.R=org.apache.log4j.RollingFileAppender