package com.springone.myrestaurants.dao; import java.util.ArrayList; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate; import com.springone.myrestaurants.config.CouchDbConfig; import com.springone.myrestaurants.domain.UserAccount; import com.springone.myrestaurants.web.CouchDbMappingJacksonHttpMessageConverter; @Repository public class UserAccountDao { //@PersistenceContext //private EntityManager entityManager; private RestTemplate restTemplate; public UserAccountDao() { restTemplate = new RestTemplate(); List<HttpMessageConverter<?>> converters = new ArrayList<HttpMessageConverter<?>>(); converters.add(new MappingJacksonHttpMessageConverter()); restTemplate.setMessageConverters(converters); } public UserAccount findUserAccount(Long id) { if (id == null) return null; return (UserAccount) restTemplate.getForObject(CouchDbConfig.URL + "demouser", UserAccount.class); // return entityManager.find(UserAccount.class, id); } public UserAccount findByName(String name) { if (name == null) return null; return (UserAccount) restTemplate.getForObject(CouchDbConfig.URL + "demouser", UserAccount.class); /* * Query q = entityManager.createQuery( * "SELECT u FROM UserAccount u WHERE u.userName = :username"); * q.setParameter("username", name); * * java.util.List resultList = q.getResultList(); if (resultList.size() * > 0) { return (UserAccount) resultList.get(0); } return null; */ } public void persist(UserAccount userAccount) { // Note only 1 user in couchdb version for now restTemplate.put(CouchDbConfig.URL + "demouser", userAccount); userAccount.setRevision(((UserAccount) restTemplate.getForObject( CouchDbConfig.URL + "demouser", UserAccount.class)) .getRevision()); } public UserAccount merge(UserAccount userAccount) { restTemplate.put(CouchDbConfig.URL + "demouser", userAccount); return (UserAccount) restTemplate.getForObject(CouchDbConfig.URL + "demouser", UserAccount.class); } }