/*
* Copyright 2002-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.integration.samples.loanbroker.loanshark.domain;
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
public class LoanShark {
private String name;
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<LoanShark>().use(null, LoanShark.class).deserialize(json);
}
public static String toJsonArray(Collection<LoanShark> collection) {
return new JSONSerializer().exclude("*.class").serialize(collection);
}
public static Collection<LoanShark> fromJsonArrayToLoanSharks(String json) {
return new JSONDeserializer<List<LoanShark>>().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<LoanShark> 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<LoanShark> 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();
}
}