1 package com.neidetcher.petunia.service;
2
3 import java.util.HashMap;
4 import java.util.List;
5 import java.util.Map;
6
7 import org.apache.commons.logging.Log;
8 import org.apache.commons.logging.LogFactory;
9 import org.springframework.dao.OptimisticLockingFailureException;
10 import org.springframework.jdbc.JdbcUpdateAffectedIncorrectNumberOfRowsException;
11 import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
12
13 public class KnowledgeDaoImpl extends SqlMapClientDaoSupport implements KnowledgeDao
14 {
15
16 protected Log log = LogFactory.getLog(KnowledgeDaoImpl.class);
17
18 @Override
19 public Knowledge save(Knowledge knowledge)
20 {
21 log.debug(knowledge.toString());
22
23 if (knowledge.isNew())
24 {
25 log.debug("create");
26 knowledge.setVersion(0);
27 Integer newId;
28
29 newId = (Integer) getSqlMapClientTemplate().insert("Knowledge.insert", knowledge);
30 knowledge.setId(newId);
31 return knowledge;
32 }
33
34 log.debug("update");
35 try
36 {
37 getSqlMapClientTemplate().update("Knowledge.update", knowledge, 1);
38 knowledge.setVersion(knowledge.getVersion() + 1);
39 return knowledge;
40 }
41 catch (JdbcUpdateAffectedIncorrectNumberOfRowsException exception)
42 {
43 log.warn(exception.getMessage());
44 throw new OptimisticLockingFailureException(
45 "Provided you have given an object with a valid ID, someone has written underneath you. "
46 + "Do another find and save.", exception);
47 }
48 }
49
50 public Knowledge find(Integer id)
51 {
52 return (Knowledge) getSqlMapClientTemplate().queryForObject("Knowledge.findById", id);
53 }
54
55 @Override
56 public List<Knowledge> findByTagName(String tagName)
57 {
58 return getSqlMapClientTemplate().queryForList("Knowledge.findByTagName", tagName);
59 }
60
61 @Override
62 public List<Knowledge> findByCategoryId(Integer categoryId)
63 {
64 return getSqlMapClientTemplate().queryForList("Knowledge.findByCategoryId", categoryId);
65 }
66
67 @Override
68 public List<String> findTags(Integer knowledgeId)
69 {
70 return getSqlMapClientTemplate().queryForList("Knowledge.findTags", knowledgeId);
71 }
72
73 @Override
74 public void addTag(Integer knowledgeId, String tagName)
75 {
76 Map<String, String> parameterMap = new HashMap<String, String>();
77 parameterMap.put("knowledgeId", knowledgeId.toString());
78 parameterMap.put("tagName", tagName);
79
80 getSqlMapClientTemplate().insert("Knowledge.addTag", parameterMap);
81 }
82
83 public void removeTag(Integer knowledgeId, String tagName)
84 {
85 Map<String, String> parameterMap = new HashMap<String, String>();
86 parameterMap.put("knowledgeId", knowledgeId.toString());
87 parameterMap.put("tagName", tagName);
88
89 getSqlMapClientTemplate().delete("Knowledge.removeTag", parameterMap);
90 }
91 }